javascript - all - antepasados jQuery que usan objetos jQuery
select all elements jquery (7)
En ese sentido, los padres () aceptan opcionalmente un selector:
$(''a'').click(function() {
if ($(this).parents("#div").length) {
alert(''boo'');
}
});
Me gustaría verificar el ancestro usando dos objetos jQuery. No tienen ID, y solo estarán disponibles como objetos jQuery (o nodos DOM si llamó a get()
). jQuery''s is()
solo funciona con expresiones, por lo que este código sería ideal pero no funcionará:
var someDiv = $(''#div'');
$(''a'').click(function() {
if ($(this).parents().is(someDiv)) {
alert(''boo'');
}
}
Solo quiero ver si un elemento es hijo de otro y me gustaría evitar retroceder a DOM si es posible.
Puede usar el método index () para verificar si un elemento existe en una lista, de modo que ¿funcionaría lo siguiente?
var someDiv = $(''#div'');
$(''a'').click(function() {
if ($(this).parents().index(someDiv) >= 0) {
alert(''boo'');
}
}
De la referencia de #index .
Una forma sería usar la función de filtro
$(''a'').click(function() {
$(this).parents().filter(function() {
return this == someDiv[0];
}).each(function() {
alert(''foo'');
})
}
Creo que también puede salirse con la suya usando jQuery.inArray
if ($.inArray( someDiv, $(this).parents() ) ) {
alert(''boo'');
}
¿No obtendría el resultado que desea simplemente utilizando un selector de CSS?
$( ''#div a'' ).click( function() { ... } );
Prueba esto:
var someDiv = $(''#div'');
$(''a'').click(function() {
if ($.inArray($(this).parents().get(), someDiv.get(0)) {
alert(''boo'');
}
}
(this).parents().index(someDiv) >= 0
, como @Gareth sugiere, funcionará bien.
Sin embargo, usar el plugin jQuery Ancestry es mucho más rápido / más eficiente .
var $element = $(''a'');
while ($element && !$element.is(''someDiv'')) {
var $element = $element.parent();
};