Как узнать, соответствует ли элемент селектору?

Допустим, у меня есть элемент DOM - как я могу определить, соответствует ли он селектору jQuery, например p или .myclass ? Селектор легко использовать для сопоставления дочерних элементов элемента, но я хочу получить истинный / ложный ответ на вопрос, соответствует ли этот конкретный элемент?

У элемента может не быть идентификатора (и я не могу присвоить ему случайный идентификатор по причинам, не связанным с этим), поэтому я не могу применить свой селектор к родительскому элементу и искать потомков с тем же идентификатором, что и мой.

Будет ли это работать так, как задумано? Я не могу понять сравнения объектов Javascript.

$(selector, myElement.parentNode).each({
  if (this == myElement) // Found it
});

Похоже, есть простой способ узнать, соответствует ли элемент DOM селектору jQuery ...

Ответов (6)

Может быть, вы просто хотите:

$(".complicated #selector p.with > div.manyParts").length

Если совпадений нет, length возвращает 0, что является ложным, поэтому вы можете использовать его в if операторе, например:

if($(".doesThis #exist").length) {
    // Do things
}

Наверное, стоило бы сохранить его в отдельной переменной и ТОГДА проверять длину; таким образом, если вам нужно что-то сделать с совпадающими элементами, вам не придется снова запускать тот же селектор.

Без jQuery с использованием Element.matches () :

// lets define 2 variables pointing to ordinary <div> elements
var elm1 = document.querySelector('div');
var elm2 = elm1.nextElementSibling;

console.log(
   elm1.matches('.foo'),         // true
   elm1.matches('.bar'),         // false
   elm2.matches('[title=bar]'),  // true
)
<div class='foo'></div>
<div title='bar'></div>


См. Список поддерживаемых браузеров

Пытаться Element.matches()

Element.matches ()

document.addEventListener("click", event => {
  if (event.target.matches(".elementsClass")) {
    // It matches
  } else {
    // Does not match
  }
});

Вы можете использовать is()метод:

if($(this).is("p")){
 // ...
}

Я считаю, что метод is () - это то, что вы ищете.

В противном случае вы можете просто попробовать выбрать элемент напрямую, если вы это имеете в виду.

Итак, если это "a" с классом "myclass", просто выполните $ ("a.myclass")

Я не могу применить свой селектор к родительскому элементу и искать потомков с тем же идентификатором, что и мой.

В любом случае этого сделать нельзя - id атрибут должен быть уникальным.