Я хотел бы проверить происхождение с помощью двух объектов jQuery. У них нет идентификаторов, и они будут доступны только как объекты jQuery (или узлы DOM, если вы вызвали get()). is() jQuery работает только с выражениями, поэтому этот код будет идеальным, но не будет работать:
var someDiv = $('#div');
$('a').click(function() {
if ($(this).parents().is(someDiv)) {
alert('boo');
}
}
Просто хочу увидеть, является ли один элемент дочерним по отношению к другому, и я бы не хотел возвращаться в мир DOM, если это возможно.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать метод index (), чтобы проверить, существует ли элемент в списке, будет ли работать следующее?
var someDiv = $('#div');
$('a').click(function() {
if ($(this).parents().index(someDiv) >= 0) {
alert('boo');
}
}
От #index reference.
В этих строках parent () может принимать сам селектор:
$('a').click(function() {
if ($(this).parents("#div").length) {
alert('boo');
}
});
.parents () принимает только самые простые из селекторов (то есть будут работать только селекторы, описывающие один элемент, а не селекторы, описывающие происхождение, такие как "p strong").
Я немного упростил свой пример, поэтому в реальном коде я получаю родительский объект, используя сохраненные ссылки jQuery вместо строковых селекторов.
Один из способов - использовать функцию фильтра
$('a').click(function() {
$(this).parents().filter(function() {
return this == someDiv[0];
}).each(function() {
alert('foo');
})
}
Я думаю, вам также удастся обойтись без jQuery.inArray.
if ($.inArray( someDiv, $(this).parents() ) ) {
alert('boo');
}
Разве вы не получите желаемый результат, просто используя селектор CSS?
$( '#div a' ).click( function() { ... } );
Проверка на наличие (this).parents().index(someDiv) >= 0, как предлагает @Gareth, будет работать нормально.
Однако использование плагин предков jQuery - это намного быстрее / эффективнее.
Спасибо! Плагин предков и методы DOM работают значительно быстрее.
Попробуй это:
var someDiv = $('#div');
$('a').click(function() {
if ($.inArray($(this).parents().get(), someDiv.get(0)) {
alert('boo');
}
}
var $element = $('a');
while ($element && !$element.is('someDiv')) {
var $element = $element.parent();
};
Идеальный Гарет, спасибо! Я бы проголосовал за вас, но мой скудный 11 балл репутации не позволяет мне сделать это.