jQuery - правило для “не содержит элемент”

Я хочу создать правило предназначаться a элемент в следующем:

<ul id="root">
   <li>
      <a href="item.html">Root Menu Item</a>
   </li>
</ul>

Однако это не должно применяться если li элемент содержит другого ul элемент, например:

<ul id="root">
   <li>
      <a href="#">Sub Menu</a>
      <ul>
         <li>
            <a href="item.html">Sub Menu Item</a>
        </li>
      </ul>
   </li>
</ul>

Я создал событие как требуется, но нуждаюсь в нем, чтобы только работать над "корневыми" пунктами меню.

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

27
задан GSTAR 2 April 2015 в 19:03
поделиться

2 ответа

Если вы соответствуете a , сделайте следующее:

var result  = $('#root > li:not(:has(ul)) > a');

Если вы хотите разрешить более глубокие вложенные элементы

    и просто хотите убедиться, что только прямые дочерние элементы не имеют
      , вы можете сделать это:

      var result  = $('#root > li:not(:has(> ul)) > a');
      

      РЕДАКТИРОВАТЬ:

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

      var result  = $('#root > li:not(:has(> ul)) > a, #someOtherElement');
      
43
ответ дан 28 November 2019 в 05:17
поделиться
$('#root a').click(function(e) {
    if ( $(this).parents('ul').length > 1 ) {
       e.preventDefault(); // cancel action for anchors inside of #root who have multiple parent list elements 
    }
});

Изменение логики в соответствии с требованиями.

2
ответ дан 28 November 2019 в 05:17
поделиться
Другие вопросы по тегам:

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