has - jquery name attribute
jquery encuentra al hermano anterior más cercano con la clase (4)
Creo que todas las respuestas carecen de algo. Prefiero usar algo como esto
$(''li.current_sub'').prevUntil("li.par_cat").prev();
Le ahorra no agregar: primero dentro del selector y es más fácil de leer y comprender. El método prevUntil () también tiene un mejor rendimiento en lugar de usar prevAll ()
aquí está el html aproximado con el que puedo trabajar:
<li class="par_cat"></li>
<li class="sub_cat"></li>
<li class="sub_cat"></li>
<li class="par_cat"></li> // this is the single element I need to select
<li class="sub_cat"></li>
<li class="sub_cat"></li>
<li class="sub_cat current_sub"></li> // this is where I need to start searching
<li class="par_cat"></li>
<li class="sub_cat"></li>
<li class="par_cat"></li>
Necesito atravesar el .current_sub
, encontrar el .par_cat
anterior más .par_cat
y hacer cosas en él.
.find("li.par_cat")
devuelve la carga completa de .par_cat
(tengo alrededor de 30 en la página). Necesito apuntar el único.
Realmente agradecería cualquier consejo :)
Tratar
$(''li.current_sub'').prev(''.par_cat'').[do stuff];
Tratar:
$(''li.current_sub'').prevAll("li.par_cat:first");
Probado con su marcado:
$(''li.current_sub'').prevAll("li.par_cat:first").text("woohoo");
llenará el li.par_cat
anterior más li.par_cat
con "woohoo".
Usar prevUntil () nos permitirá obtener un hermano distante sin tener que obtener todo. Tenía un conjunto particularmente largo que era demasiado intensivo de CPU usando prevAll ().
var category = $(''li.current_sub'').prev(''li.par_cat'');
if (category.length == 0){
category = $(''li.current_sub'').prevUntil(''li.par_cat'').last().prev();
}
category.show();
Esto obtiene el primer hermano anterior si coincide, de lo contrario, obtiene el hermano anterior al que coincide, por lo que simplemente respaldamos uno más con prev () para obtener el elemento deseado.