I asked a question about what is better to use: simple code or modules when writing a simple script for a page. On the toaster answered that the modules, but my module is terrible.
About the modules most liked the description here .
Question: what is wrong with my module?
An example for a simple accordion:
"use strict"; $(document).ready(function(){ if($('.accordion').length){ accordion.init(); } }); var accordion = (function(){ var _openContent = function(el){ var wrap = el.closest('.accordion'), item = el.closest('.accordion__item'), items = wrap.find('.accordion__item'), content = item.find('.accordion__content'), contents = wrap.find('.accordion__content'), dur = 500; if(!item.hasClass('on')){ items.siblings().removeClass('on'); item.addClass('on'); contents.stop(true,true).slideUp(dur); content.stop(true,true).slideDown(dur); } else { item.removeClass('on'); content.stop(true,true).slideUp(dur); } } // Инициализация return { init: function(){ $('.accordion__trigger').on('click', function(e){ e.preventDefault(); var $this = $(this); _openContent($this); }); } } })(); *, *:before, *:after { box-sizing: border-box; } html, body { margin: 0; padding: 0; } a { text-decoration: none; color: inherit; transition: all .27s ease-in-out; } a:hover { color: tomato; } ul { padding: 0; margin: 0; list-style-type: none; } body { font-family: 'Raleway', sans-serif; font-size: 1rem; line-height: 1.5rem; color: #727272; } .accordion { width: 100%; margin: 2rem auto; padding: 0 2rem; } .accordion__item { box-shadow: 0 2px 7px rgba(0,0,0,0.17); } .accordion__title { text-transform: uppercase; margin: 0; } .accordion__trigger { display: block; color: #fff; padding: .5rem 1rem; background: #9c27b0; box-shadow: 0 2px 7px rgba(0,0,0,0.27); padding-left: 3.5rem; position: relative; } .accordion__trigger:before { content: '+'; position: absolute; left: 0; top: 0; bottom: 0; width: 2rem; text-align: center; line-height: 2.5rem; background: #ff4051; font-weight: 800; transition: all .34s ease-in-out; } .on .accordion__trigger:before { content: '-'; } .accordion__trigger:after { content: ' '; position: absolute; left: 2rem; top: 0; bottom: 0; width: 0; height: 0; border-top: 1.25rem solid transparent; border-bottom: 1.25rem solid transparent; border-left: .5rem solid #ff4051; } .accordion__trigger:hover { color: #fff; background: #7b1fa2; } .accordion__content { padding: 1.5rem 3.5rem; display: none; } .accordion__content span { display: block; text-transform: uppercase; color: #212121; font-weight: 700; margin-bottom: 1rem; } <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div class="accordion"> <ul class="accordion__list"> <li class="accordion__item"> <a href="#" class="accordion__trigger"> <h5 class="accordion__title">Lorem ipsum 1.</h5> </a> <div class="accordion__content"> <p> <span>Content 1. </span> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Inventore saepe nulla iure cupiditate libero accusantium deleniti in, quisquam quae quidem. </p> </div> </li> <li class="accordion__item"> <a href="#" class="accordion__trigger"> <h5 class="accordion__title">Lorem ipsum 2.</h5> </a> <div class="accordion__content"> <p> <span>Content 2. </span> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Inventore saepe nulla iure cupiditate libero accusantium deleniti in, quisquam quae quidem. </p> </div> </li> <li class="accordion__item"> <a href="#" class="accordion__trigger"> <h5 class="accordion__title">Lorem ipsum 3.</h5> </a> <div class="accordion__content"> <p> <span>Content 3. </span> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Inventore saepe nulla iure cupiditate libero accusantium deleniti in, quisquam quae quidem. </p> </div> </li> </ul> </div>