.has () en jquery

Estoy tratando de entender jquery .has (). Traté de usarlo para encontrar un elemento li que tenga una clase = "a" y establecer su borde.

<script type=text/javascript>
$("document").ready( function(){
    $("li").has(".a").css("border", "3px solid red");
});

<ul id="list1">
    <li class="a">item 1</li>
    <li class="a">item 2</li>
    <li class="b">item 3</li>
    <li class="b">item 4</li>
</ul>

preguntado el 16 de mayo de 11 a las 18:05

5 Respuestas

$("li").has(".a") selecciona los mismos elementos que $("li .a")no, $("li.a"). Para seleccionar los mismos elementos que $("li.a") con dos expresiones diferentes, usa $("li").filter(".a"). Para su ejemplo, simplemente tiene sentido combinarlos, pero si desea que una de las dos partes se convierta en un argumento de función, puede ser útil dividirlas.

Respondido el 20 de diciembre de 11 a las 23:12

Gracias a todos por sus respuestas. - Chapsterj

Tenga en cuenta que la primera línea aquí no es cierta. $ ("li"). has (". a") selecciona un montón de elementos, mientras que $ ("li .a") selecciona solo elementos .a! Aún así, el punto sostiene que se ve en los niños y, por lo tanto, no encaja bien porque desea verificar la clase en el propio li. - Willem Mulder

.has() busca elementos descendientes haciendo juego con el selector suministrado. De los documentos de la API:

.has( selector )

Descripción Reduzca el conjunto de elementos coincidentes a aquellos que tengan un descendiente que coincida con el selector o elemento DOM.

¡Lo que quieres hacer es mucho más sencillo!

$("li.a").css("border", "3px solid red");

contestado el 16 de mayo de 11 a las 22:05

NO, has significa "tiene un elemento hijo". Quieres

$("li.a").css("border", "3px solid red");

contestado el 16 de mayo de 11 a las 22:05

Más bien "tiene un descendiente elemento ". - user113716

@ Matt Ball: Sí, ya voté por el tuyo. Este no debería tener 5 votos, y como no ha sido corregido, lo rechazaré. - user113716

.has solo se puede utilizar como elemento de selección. no seleccionando clase.

$("ul").has("li.a").css("border", "3px solid red");

contestado el 16 de mayo de 11 a las 22:05

Esa es una declaración engañosa. $("ul").has(".a") funcionaría bien. - Matt Ball

@ Matt Ball ya. estás en lo correcto. Lo escribí porque quiere seleccionar solo elementos li. ¿Qué pasa si ul han anidado ul teniendo una clase? Vivek Goel

¿Cómo hacer esto?

<script type=text/javascript>
$("document").ready( function(){
    $("li.a").css("border", "3px solid red");
});
</script>

contestado el 16 de mayo de 11 a las 22:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.