Jump to content
  • 0

Помогите переделать функцию


ilyas
 Share

Question

На одном сайте нашел интересный аккордеон, его скрипт скопировал но он оказался професионально написанный это не пару строчек jquery
В общем вот он
 

function() {    app.on("#faq", function(e, t) {        return t("dl.faq.faq-imp").click(function() {            return e(this).toggleClass("faq-closed faq-open").find("dd").slideToggle(300)        })    })}.call(this)

Помогите упростить его, тут что-то из объектно ориентированного применятеся, функция что-то возвращает а точнее избавиться всяких там return и чтобы было как-то так
 

$(document).ready(function(){app.on("#faq",function(){t("dl.faq.faq-imp").click(function().toggleClass("faq-closed faq-open").find("dd").slideToggle(300)})})});
Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

 

А чем не подходит (официальный) аккордион

:D

 

И вы туда же

В общем мне понравился аккордеон с ссылка (немножко долго будет грузиться) это с сайта groupon, вместе с библиотекой jquery упаковали код инициализирующий аккордеон,  коду сделал pretty print чтобы можно было читать код, помогите упростить код инициализирующий аккордеон а то как то не хочется себе на сайт класть 6000 строк ненужного кода:

function() {    app.on("#faq", function(e, t) {        return t("dl.faq.faq-imp").click(function() {            return e(this).toggleClass("faq-closed faq-open").find("dd").slideToggle(300)        })    })}.call(this)

Код как то странно написан и вообще не соответствует лозунгу jquery write less do more, работает на ооп

Link to comment
Share on other sites

  • 0

А что странного в этом коде? Меня смущает только return и call соответственно, не понимаю для чего они. Но это наверно потому, что код вырван из контекста.

Полный код а это 6000 строчек включая саму jquery 1.8 и все в читабельном видел можете посмотреть перейдя по ссылке на jsfiidle скопировав код js в свой редактор нажав CTRL+F и забив в поиск faq-imp найдете код котоый я выложил в теме

Link to comment
Share on other sites

  • 0

Ну мне не особо интересно чо там за код, мне интересно что вас смущает?

Код расположенный выше от кода инициализатора аккордеона если удаляю то аккордеон перестает работать

Помогите выковырнуть код из этой каши и чтоб работало а то тронув одну функцию то скрипт перестает работать

Хотелось бы чтобы было как в книгах простой и лаконичный код

$(document).ready(function(){

      $(#akkordeon).find("dd").click(toggleClass("faq-closed faq-open").slideToggle(300));

})

как-то так например

Link to comment
Share on other sites

  • 0

А вот разметка с этого сайта

<div id="faq" class="b b-static">   <div class="b-in">   <h2 class="sh2">Частые вопросы и ответы на них</h2>      <dl class="faq faq-imp faq-closed">      <dt>В чём суть предложений Групон?         <b class="close"></b>         <b class="open"></b>      </dt>      <dd>         <p>Несколько раз в неделю Групон делает посетителям предложение, от которого нельзя отказаться. Любой желающий сможет сходить в кафе, в кино, записаться на фитнес или танцы, попробовать скалолазание или покататься в картинге со скидкой 50-90%. Заведения соглашаются на такую скидку, т.к. к ним приходит сразу много посетителей.</p>      </dd>      </dl>      <dl class="faq faq-imp faq-closed">      <dt>Когда акция считается состоявшейся?         <b class="close"></b>         <b class="open"></b>      </dt>      <dd>         <p>Акция состоится, только если наберется минимально необходимое число участников. Чтобы повысить шансы, вы можете рассказать своим друзьям и знакомым о понравившемся вам предложении через почту, Акция состоится, только если наберется минимально необходимое число участников. Чтобы повысить шансы, вы можете рассказать своим      </dd>      </dl></div></div>

А это скрипт который нужно переделать чтобы не было там всяких return и чтобы функция не принимала там всяких e, t

function() {    app.on("#faq", function(e, t) {        return t("dl.faq.faq-imp").click(function() {            return e(this).toggleClass("faq-closed faq-open").find("dd").slideToggle(300)        })    })}.call(this)
Great Rash

Что-то немного не пойму как ваш скрипт прикрутить к этой разметке

Edited by ilyas
Link to comment
Share on other sites

  • 0

Я уже почти сам написал скрипт но при клике он разворачивает все теги dl, как сделать чтобы раскрывал только текущий ?
 

$(document).ready(function(){	$('dl.faq.faq-imp').click(function(){		$('dl.faq.faq-imp').toggleClass("faq-closed faq-open").find("dd").slideToggle(300)	}	)})
Link to comment
Share on other sites

  • 0

Не знаю какие стили навешаны на элементы списка. По логике должно сработать так:

$(document).ready(function(){	$('dl.faq.faq-imp').click(function(){		$(this).toggleClass("faq-closed faq-open").find("dd").slideToggle(300)	}	)})

Странное использование списка определений: на одну пару термин-определение один список. На то он и список чтоб, содержать в себе множество пар термин-определение. С точки зрения семантики должно быть так:

<dl class="faq">      <dt class="faq-closed">В чём суть предложений Групон?         <b class="close"></b>         <b class="open"></b>      </dt>      <dd>         <p>Несколько раз в неделю Групон делает посетителям предложение, от которого нельзя отказаться. Любой желающий сможет сходить в кафе, в кино, записаться на фитнес или танцы, попробовать скалолазание или покататься в картинге со скидкой 50-90%. Заведения соглашаются на такую скидку, т.к. к ним приходит сразу много посетителей.</p>      </dd>       <dt class="faq-closed">Когда акция считается состоявшейся?         <b class="close"></b>         <b class="open"></b>      </dt>      <dd>         <p>Акция состоится, только если наберется минимально необходимое число участников. Чтобы повысить шансы, вы можете рассказать своим друзьям и знакомым о понравившемся вам предложении через почту, Акция состоится, только если наберется минимально необходимое число участников. Чтобы повысить шансы, вы можете рассказать своим      </dd>      </dl>
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy