Селектор ссылок меню в JQuery - PullRequest
0 голосов
/ 03 августа 2011

У меня есть это HTML-меню:

<div id="menu">
    <ul>
          <li>
                <a href="1.html"> 1 </a>
          </li>
          <li>
                <a href="2.html"> 2 </a>
          </li>
          <li class="submenu">
                <a href="#"> 3 list </a>
                <ol>
                     <li>
                           <a href="31.html"> 31 </a>
                     </li>
                     <li>
                           <a href="32.html"> 32 </a>
                     </li>
                     <li>
                           <a href="33.html"> 33 </a>
                     </li>
                </ol>
          </li>
          <li class="submenu">
                <a href="#"> 4 list </a>
                <ol>
                     <li>
                           <a href="41.html"> 41 </a>
                     </li>
                     <li>
                           <a href="42.html"> 42 </a>
                     </li>
                </ol>
          </li>
          <li>
                <a href="5.html"> 5 </a>
          </li>
    </ul>
 </div>

Я использую JQuery, и я хотел получить элементы ссылки (a), которые не являются частью подменю (1,2 и 5), поэтому я попытался:

$('#menu ul li a').each(function(){
   //do something with the link element
});

Но я понял, что этот селектор берет все элементы ссылки (1,2,31,32,33,41,42 и 5).

Я проверил руководство по JQuery и не смог найти какой-либо способ получить нужные мне элементы ссылок всего лишь за один шаг, поэтому я наконец сделал это:

$('#menu ul li a').each(function(){
   if($(this).parent().parent().is('ul')){
      //do something with the link element
   }
});

Это просто берет все элементы ссылки и в условных фильтрах те, которые имеют ul дед (1,2 и 5).

Я хотел бы знать, есть ли лучший и более чистый способ получить элементы ссылки не подменю.

Спасибо!

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Попробуйте это

$('#menu ul li a').not("li.submenu").each(function(){ });

На самом деле, это может вернуть внутренний li (s).

Так может еще один нет?

$('#menu ul li a').not(".submenu").not(".submenu *").each(function(){ });
0 голосов
/ 03 августа 2011

Надеюсь, я не ошибаюсь, понимая ваш вопрос ..

Вы хотите получить первый уровень li элементов, у которых нет подсписка?Тогда это означает li элемент 1, 2 и 5?Если это так, попробуйте следующее:

$('#menu ul > li:not(:has(li))').each(...);

Он проверяет только элемент первого уровня после #menu, используя знак >.Затем снова выполните фильтрацию для каждого li, в котором нет li.

Надеюсь, это поможет ..

...