Выберите элемент <li>
, у которого нет дочернего элемента <a>
, с помощью селектора :has
и :not
:
$("li:not(:has(a))").addClass("current");
jsFiddle
- РЕДАКТИРОВАТЬ -
Хотя это может быть самое короткое решение, за исключением читабельности, оно определенно не является лучшим в отношении скорости.
Имея это в виду, я бы посоветовал вам проверить отличный ответ , предоставленный @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 ), соответствующие указанному селектору. Однако вы можете указать любой параметр обхода дерева в качестве второго аргумента метода. Таким образом, это можно записать в виде одного из следующих:
$("li").thatHasNo("a", "children").addClass("current");
//...
$("li").thatHasNo("a", "find").addClass("current");
//...
$("li").thatHasNo(".class", "siblings").addClass("lame");
Я обновил jsFiddle , чтобы отразить это.