Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Универсальная функция для сворачивания нескольких типовых блоков (https://javascript.ru/forum/dom-window/21775-universalnaya-funkciya-dlya-svorachivaniya-neskolkikh-tipovykh-blokov.html)

fennick 23.09.2011 14:28

Универсальная функция для сворачивания нескольких типовых блоков
 
На странице находятся несколько таблиц, над каждой из которых находится такая кнопка:

<ul id="icons" style="margin-top: -5px;">
<li class="ui-state-default ui-corner-all" title="Reload">
<span id="do_wrap_steps_table" class="ui-icon ui-icon-arrow-1-n"></span>
</li>
</ul>


Код, сворачивающий блок с ID "steps_table_wrapper":
$('#do_wrap_steps_table').click(function(event) {
	$('#steps_table_wrapper').slideToggle('slow', function() {
		var srcClass = $('#do_wrap_steps_table').attr('class');
        if(srcClass == 'ui-icon ui-icon-arrow-1-n') {
            $('#do_wrap_steps_table').attr('class', 'ui-icon ui-icon-arrow-1-s');
        } else {
            $('#do_wrap_steps_table').attr('class', 'ui-icon ui-icon-arrow-1-n');
        } 
});
});


Поскольку я обращаюсь к каждому блоку "steps_table_wrapper" по ID, реагируя на нажатие кнопок, ID которых пока тоже одинаковы сворачивается только первый из них. Чтобы сворачивать всегда только нужный блок, предполагается такое решение: пронумеровать кнопки и блоки, изменив код JS таким образом, чтобы реакция осуществлялась при нажатии на любом объекте класса "кнопка" и, беря ID кнопки, выделяя ее номер, и выбирая ID блока "steps_table_wrapper" по нему.
Однако, решение кажется мне совершенно не изящным... Есть ли более правильные варианты?

ksa 23.09.2011 15:32

Цитата:

Сообщение от fennick
ID которых пока тоже одинаковы

Такого быть не должно...

ksa 23.09.2011 15:33

Цитата:

Сообщение от fennick (Сообщение 127796)
На странице находятся несколько таблиц, над каждой из которых находится такая кнопка:

<ul id="icons" style="margin-top: -5px;">
<li class="ui-state-default ui-corner-all" title="Reload">
<span id="do_wrap_steps_table" class="ui-icon ui-icon-arrow-1-n"></span>
</li>
</ul>

Вообще-то это маркированый список... :haha:

fennick 23.09.2011 18:32

По моему, я четко объяснил, почему ID пока одинаковы: изначально требовалось сворачивать только один контейнер, теперь - несколько. Поэтому я и спросил совета, как это лучше реализовать. Я предложил свой вариант решения, но мне он показался весьма неизящным.

Мне прекрасно известно, что это маркированный список, который в данном случае отображает объект, который выглядит как кнопка. Думаю, это очевидно. Я обратился за помошью, а вы, вместо того, чтобы подсказать, что называется, лулзов словить пришли?

melky 23.09.2011 21:09

действуйте через родителя, т .е. изнутри, а не снаружи

т.е. поиск не с начала документа, а от нажатой кнопки

fennick 23.09.2011 23:59

melky,
собственно, так и хочу, после некоторых раздумий.
Что мне не нравится, так это то, что придется три раза вызвать getParent.

melky 24.09.2011 00:01

и не надо %) посмотрите в сторону jquery.parents(selector)


_______
е-чее сафари заставляет таки срать кирпичами. написал целую тираду, хотел кинуть ссыль на доку - эта мразина перезагрузила страницу и убила весь напечатанный текст


ЗЫ прошу прощения, эмоции :)

fennick 26.09.2011 13:23

Не страшно :) Спасибо, я попробую.


Часовой пояс GMT +3, время: 00:03.