Подтвердить что ты не робот

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>

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

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

4b9b3361

Ответ 1

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

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

Если вы хотите разрешить более глубокие вложенные элементы <ul> и просто хотите проверить, чтобы убедиться, что только прямые дети не имеют <ul>, вы можете сделать это:

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

EDIT:

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

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

Ответ 2

$('#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 
    }
});

Измените логику на каждое требование.