jQuery - how to check if two elements are the same?

前端 未结 4 548
感情败类
感情败类 2020-12-16 09:59

I need to pass an element to a function and then match that specific element while traversing parent. The catch (for someone clueless like me) is that this element doesn\'t

相关标签:
4条回答
  • 2020-12-16 10:03

    Comparing JQuery objects will never return true, because each JQuery object is a a new object, even if their selectors are equal.

    To compare elements, you have to check whether the DOM elements are equal:

    this === element.get(0);
    
    0 讨论(0)
  • 2020-12-16 10:07

    Use isEqualNode to check if two elements have the same markup

    this.isEqualNode(element)
    

    Or use isSameNode to check if two elements are the same DOM node

    this.isSameNode(element)
    
    0 讨论(0)
  • 2020-12-16 10:12

    You can use the jQuery is() function. The original answer can be found here.

    function colorize(element) {
        element.parent().find('span').each(function() {
            if ( $(this).is(element) ) {
                $(this).css('background','yellow');
            } else {
                $(this).css('background','pink');
            }
        });
    }
    
    0 讨论(0)
  • 2020-12-16 10:24

    You don't have to. You're always applying the special style to one specific element, so color them all, and then change the color of the specific element.

    function colorize(element) {
        element.parent().find('span').each(function() {
            $(this).css('background','pink');
        });
    
        element.css('background','yellow');
    }
    

    The problem with your comparison was that you were comparing two objects (jQuery objects). When comparing objects, unless they're pointing to the same thing, they are considered unequal:

    var o1 = {};
    var o2 = {};
    o1 !== o2;
    

    You can work around this by removing the jQuery wrapper:

    function colorize(element) {
        var realElement = element[0];
    
        element.parent().find('span').each(function() {
            if (this === realElement) {
                $(this).css('background','yellow');
            } else {
                $(this).css('background','pink');
            }
        });
    }
    

    This way, you're comparing DOM elements to DOM elements, and not apples to oranges or objects to objects.

    0 讨论(0)
提交回复
热议问题