Javascript — как показывать открытое меню при загрузке?

Всем добрый день. Есть скрипт, который сразу показывает некоторые пункты меню:

$('ul#js-left_menu ul').each(function(i) {
		if ($(this).find('.text_sel').length || i == 0) {
			$(this).show().prev().removeClass('collapsed').addClass('expanded');
		}else {
			$(this).hide().prev().removeClass('expanded').addClass('collapsed');
		}


Мне надо, чтобы он показывал 1 и 2 пункт. Сейчас только первый. Не могу понять, как сделать.
Понятно, что вот тут меняется
if ($(this).find('.text_sel').length || <b>i == 0</b>) {

Если ставить i < 3, то показывает все 3 пункта, а надо сделать именно выборочно 0 и 2
i == 0, 2 Тоже не работает (
  • Вопрос задан
  • 2612 просмотров
Пригласить эксперта
Ответы на вопрос 5
@Shavadre
Попробуйте изменить условие на if (!($(this).find('.text_sel').length))
У вас всегда проверяется условие i (в вашем случае объект DOM ul) с нулем. А объект всегда равен true, 0 же при переводе к логическому типу будет false. Поэтому у вас все и выбирается.

Вообще хорошо бы код посмотреть со списком. Если нужно оперировать с ul li, то и надо пробегать по ним.
Ответ написан
Комментировать
@maximka_l Автор вопроса
Шаблон
<div id="left_menu">
	<ul id="js-left_menu">
<?
$DL=1;
foreach($arResult as $k=>$arItem) {
	if($arParams["MAX_LEVEL"] == 1 && $arItem["DEPTH_LEVEL"] > 1) continue;

	if($arItem['DEPTH_LEVEL'] > $DL) echo '<ul>';
	elseif($arItem['DEPTH_LEVEL'] < $DL) echo '</li></ul></li>';
	elseif($arItem['DEPTH_LEVEL'] == $DL AND $k>0) echo '</li>';

	$DL = $arItem['DEPTH_LEVEL'];
	//na($arItem['PARAMS']['hover']);
	$class = $aka = false;
	$class.= $arItem['SELECTED'] ? 'text_sel' : '';
	$class.= $arItem['PARAMS']['hover']==1 ? ' hover popupExpress' : '';

	echo 	'<li'.($arItem['SELECTED']?' class="root_sel"':'').'>
				<a href="'.$arItem['LINK'].'" class="'.$class.'"'./*($arItem['PARAMS']['aka']==1?' onClick="itemAka(this); return false"':'').*/'>'.$arItem['TEXT'].'</a>';
}
if($DL > 1)
{
	for($i=$DL; $i<1; $i--)
		echo '</li></ul>';
}
?>

		</li>
	</ul>
</div>


Скрипт полнностью:
function itemAka() {
	$('ul#js-left_menu ul').each(function(i) {
		if ($(this).find('.text_sel').length || i==0 && i==3) {
			$(this).show().prev().removeClass('collapsed').addClass('expanded');
		}else {
			$(this).hide().prev().removeClass('expanded').addClass('collapsed');
		}
		$(this).prev().addClass('collapsible').click(function() {
			var this_i = $('ul#js-left_menu ul').index($(this).next());
			if ($(this).next().css('display') == 'none') {
				$(this).next().slideDown(300, function () {
					$(this).prev().removeClass('collapsed').addClass('expanded');
					//cookieSet(this_i);
				});
			}else {
				$(this).next().slideUp(300, function () {
					$(this).prev().removeClass('expanded').addClass('collapsed');
					//cookieDel(this_i);
					$(this).find('ul').each(function() {
						//$(this).hide(0, cookieDel($('ul#js-left_menu ul').index($(this)))).prev().removeClass('expanded').addClass('collapsed');
						$(this).hide().prev().removeClass('expanded').addClass('collapsed');
						$(this).css('display', 'none');
					});
				});
			}
		return false;
		});
	});
}


Система битрикс
Ответ написан
Комментировать
@apasen
Что то не пойму откуда берется переменная i в js функции?
Ответ написан
@apasen
И можно описать, что должно реализовывать данное творение? Есть ощущение, что все это можно реализовать в 6 строчках кода.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы