108

So I'm trying to figure out how to compare two jQuery objects, to see if the parent element is the body of a page.

here's what I have:

if ( $(this).parent() === $('body') ) ...

I know this is wrong, but if anybody understands what I'm getting at, could they point me towards the correct way of doing this?

2
  • 3
    var $parent = $(this).parent(), $body = $('body'); var theSame = $parent.is($body); api.jquery.com/is/#is-jQuery-object Commented Oct 30, 2013 at 13:55
  • 1
    $(this).parent().is($('body')); //or check for anything else besides $('body') stackoverflow.com/a/6986013/112100 Commented Jul 26, 2014 at 7:24

4 Answers 4

161

You need to compare the raw DOM elements, e.g.:

if ($(this).parent().get(0) === $('body').get(0))

or

if ($(this).parent()[0] === $('body')[0])
Sign up to request clarification or add additional context in comments.

4 Comments

That will only ensure equality if the jQuery object matched a single DOM element. If there were multiple matches you'd need a loop of some sort to compare each one.
@Jimmy, yes but this is enough for the OP requirements, he wants only to know "... if the parent element is the body ..."
Can shorten to: if(this.parentNode === document.body);
61

Why not:

if ($(this).parent().is("body")) {
  ...
}

?

1 Comment

Or if ($(this).parent().is($("body")))
21

Looping is not required, testing the single first node is not required. Pretty much nothing is required other than ensuring they are the same length and share identical nodes. Here is a small code snippet. You may even want to convert this into a jquery plugin for your own uses.

jQuery(function($) {
  // Two separate jQuery references
  var divs = $("div");
  var divs2 = $("div");

  // They are equal
  if (divs.length == divs2.length && divs.length == divs.filter(divs2).length) {         

  // They are not
  } else {}
});

2 Comments

Wouldn't this say that the following divs are equal? <div>abc</div> <div>def</div>
No, filter would not pass DOM elements that are not equal.
1

I stumbled on these answers and wondered which one was better. It all depends on your needs but the easiest to type, read and execute is the best of course. Here's the perf testcase I made to make a decision.

http://jsperf.com/jquery-objects-comparison

3 Comments

Raw DOM Elements 2 reporting the fastest for me: looks like the same for every other reported browser too.
Exactly, it's the same as the first one but uses javascript's native array parsing.
the jsperf.com link no longer active

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.