Seleccionar <li>
elemento que no tiene hijos <a>
utilizando el selector de :has
y :not
:
$("li:not(:has(a))").addClass("current");
jsFiddle
- EDITAR -
Si bien esta podría ser la solución más corta, la legibilidad aparte, definitivamente no es la mejor en cuanto a velocidad.
Teniendo esto en cuenta, le sugiero que compruebe una gran answer proporcionada por @bazmegakapa.
Dado que esto es algo que (o cualquier otra persona incluida yo) podría terminar usando más de una vez, he ampliado jQuery un poco con este plugin/método que puede utilizar con el fin de DRY su código:
jQuery.fn.thatHasNo = function(element, method) {
if (typeof method === "undefined" || method === null) method = "children";
return this.not(function() {
return $(this)[method](element).length;
});
};
que se puede llamar con:
$("li").thatHasNo("a").addClass("current");
Esta extensión, por defecto (si segundo argumento de método no se pasa), comprobar si hay descendientes directos (children) que el selector partido proporcionada. Sin embargo, puede proporcionar cualquier tree-traversal parameter como segundo argumento al método. Por lo tanto, esto puede escribirse como una de las siguientes:
$("li").thatHasNo("a", "children").addClass("current");
//...
$("li").thatHasNo("a", "find").addClass("current");
//...
$("li").thatHasNo(".class", "siblings").addClass("lame");
He actualizado para reflejar que jsFiddle.
Esto solo funcionará si el 'li' no tiene ningún elemento secundario. Quiero decir, el OP solo quería aquellos que no tienen un hijo 'a'. – kapa