Выберите <li>
элемент, который не имеет <a>
ребенка с помощью :has
и :not
селектор:
$("li:not(:has(a))").addClass("current");
jsFiddle
- EDIT -
Хотя это может быть кратчайшее решение, его читаемость в стороне, он определенно не самый лучший в отношении скорости.
С учетом этого, я предлагаю вам проверить отличный answer от @bazmegakapa.
Поскольку это то, что вы (или кто-либо другой, включая меня), может в конечном итоге, используя более чем один раз, я расширил JQuery немного с этим плагином/метод можно использовать для того, чтобы DRY код:
jQuery.fn.thatHasNo = function(element, method) {
if (typeof method === "undefined" || method === null) method = "children";
return this.not(function() {
return $(this)[method](element).length;
});
};
что вы можете позвонить с:
$("li").thatHasNo("a").addClass("current");
Это расширение по умолчанию (если второй аргумент метода не передается), проверьте, есть ли какие-либо прямые потомки (children), что матч при условии селектора. Тем не менее, вы можете предоставить любой tree-traversal parameter в качестве второго аргумента метода. Таким образом, это может быть записано как одно из следующих действий:
$("li").thatHasNo("a", "children").addClass("current");
//...
$("li").thatHasNo("a", "find").addClass("current");
//...
$("li").thatHasNo(".class", "siblings").addClass("lame");
Я обновил jsFiddle, чтобы отразить это.
Это будет работать, только если 'li' не имеет дочерних элементов. Я имею в виду, что ФП хотели только тех, у кого нет «ребенка». – kapa