Предки jQuery, использующие объекты jQuery

Я хотел бы проверить происхождение с помощью двух объектов jQuery. У них нет идентификаторов, и они будут доступны только как объекты jQuery (или узлы DOM, если вы вызвали get()). is() jQuery работает только с выражениями, поэтому этот код будет идеальным, но не будет работать:

var someDiv = $('#div');

$('a').click(function() {
    if ($(this).parents().is(someDiv)) {
        alert('boo');
    }
}

Просто хочу увидеть, является ли один элемент дочерним по отношению к другому, и я бы не хотел возвращаться в мир DOM, если это возможно.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
0
6 201
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

Вы можете использовать метод index (), чтобы проверить, существует ли элемент в списке, будет ли работать следующее?

var someDiv = $('#div');

$('a').click(function() {
    if ($(this).parents().index(someDiv) >= 0) {
        alert('boo');
    }
}

От #index reference.

Идеальный Гарет, спасибо! Я бы проголосовал за вас, но мой скудный 11 балл репутации не позволяет мне сделать это.

MichaelThompson 29.10.2008 18:23

В этих строках parent () может принимать сам селектор:

$('a').click(function() {
  if ($(this).parents("#div").length) {
    alert('boo');
  }
});

.parents () принимает только самые простые из селекторов (то есть будут работать только селекторы, описывающие один элемент, а не селекторы, описывающие происхождение, такие как "p strong").

Már Örlygsson 29.10.2008 05:45

Я немного упростил свой пример, поэтому в реальном коде я получаю родительский объект, используя сохраненные ссылки jQuery вместо строковых селекторов.

MichaelThompson 29.10.2008 18:22

Один из способов - использовать функцию фильтра

$('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 работают значительно быстрее.

MichaelThompson 29.10.2008 18:27

Попробуй это:

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

Другие вопросы по теме