Сравните 'e.target' с объектом jQuery
Что я хочу сделать:
( clickedObject === someDiv ) //returns true or false
Что я пробовал
( $(e.target) === $('.selector') ); //returns a false negative.
Мое обходное решение
( $(e.target).attr('class') === $('.selector').attr('class') ); //works as intended, not so clean though.
Каков правильный способ сравнения объекта, который я нажал на объект в DOM?
Ответы
Ответ 1
Чтобы проверить, есть ли e.target
этот класс, вы можете использовать функцию hasClass
.
if ($(e.target).hasClass("selector"))
Или, если вы действительно хотите сравнить объекты, обратите внимание, что селекторы jQuery возвращают коллекцию элементов, поэтому я думаю, что вы захотите
if (e.target === $('.selector')[0])
Ответ 2
Ты близко. Вместо этого используйте .is()
:
if($(e.target).is('.selector')) {
// Your code
}
Трюк заключается в том, что вы переносите e.target
в объект jQuery, чтобы разрешить ему доступ ко всем полезным методам jQuery.
Если вы видите, имеет ли e.target
определенный класс, попробуйте использовать .hasClass()
вместо .is()
:
if($(e.target).hasClass('selector')) {
// Your code
}
Любой из методов работает, хотя .hasClass()
немного понятнее, что делает код, и работает быстрее, чем с помощью .is()
Ответ 3
Если вы хотите сопоставить элемент, к которому привязано событие, вы можете использовать $(this)
, или если вы хотите найти, какой элемент вызвал событие, используйте $(event.target)
.
Ниже приведен пример обоих из них.
http://jsfiddle.net/Phunky/TbJef/
Если вы не используете делегирование событий, они будут одинаковыми, и если есть один и тот же элемент.
Ответ 4
Очевидно, что здесь лучше всего использовать функцию .is()
.
Если вы обнаружите, что делаете такое сравнение, попробуйте проверить, можно ли использовать встроенные механизмы jQuery следующим образом:
$(element).on("click", ".selector", function() {
alert("clicked");
});
Второй аргумент в методе .on()
является целевым селектором. При использовании этой конструкции (подробнее: http://api.jquery.com/on/#direct-and-delegated-events), не нужно делать никаких дополнительных сравнений.
https://jsfiddle.net/m5zysufy/