What I want to do:
( clickedObject === someDiv ) //returns true or false
What I tried
( $(e.target) === $('.selector') ); //returns a false negative.
My workaround
( $(e.target).attr('class') === $('.selector').attr('class') ); //works as intended, not so clean though.
What is the right way to compare the object I clicked to an object in the DOM?
To check if e.target
has this class you can use the hasClass
function.
if ($(e.target).hasClass("selector"))
Or, if you really want to compare objects, note that jQuery selectors return a collection of items, so I think you'll want
if (e.target === $('.selector')[0])
You're close. Use .is()
instead:
if($(e.target).is('.selector')) {
// Your code
}
The trick here is that you wrap e.target
in a jQuery object to allow it access to all the useful jQuery methods.
If you're just seeing whether e.target
has a certain class, try using .hasClass()
in place of .is()
:
if($(e.target).hasClass('selector')) {
// Your code
}
Either method works, although .hasClass()
is a little clearer as to what the code does, and is faster than using .is()
If you want to match the element that the event is attached to you can use $(this)
, or if you want to find which element triggered the event use $(event.target)
.
Below is an example of both of these.
http://jsfiddle.net/Phunky/TbJef/
Unless you're using event delegation these will be the same though and if there the same element.
Obviously using .is()
function is the best solution here.
If you find yourself doing such comparison, try to check if it is possible to use embedded jQuery mechanisms like this:
$(element).on("click", ".selector", function() {
alert("clicked");
});
Second argument in the .on()
method is a target selector. When using this construction (read more: http://api.jquery.com/on/#direct-and-delegated-events) there will be no need to make any additional comparisons.
https://jsfiddle.net/m5zysufy/