all javascript jquery

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(); };