Как я могу определить, соответствует ли элемент селектору?

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

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

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

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

Без 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>

Ответ 5

Возможно, вы просто хотите:

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

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

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

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

Ответ 6

Попробуйте Element.matches()

Element.matches()

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