jQuery - 如何检查两个元素是否相同?

A-O*_*-OK 31 javascript jquery

我需要将一个元素传递给一个函数,然后在遍历父元素时匹配该特定元素.捕获(对于像我这样无能为力的人)是这个元素没有id.在下面的示例中,我希望每个元素都变为粉红色,除非单击的元素变为黄色

function colorize(element) {
    element.parent().find('span').each(function() {
        if ($(this)===element) { // the problem is this is always false
            $(this).css('background','yellow');
        } else {
            $(this).css('background','pink');
        }
    });
}
$('span').click(function() {
    colorize($(this));
});
Run Code Online (Sandbox Code Playgroud)

Rob*_*b W 45

比较JQuery对象将永远不会返回true,因为每个JQuery对象都是一个新对象,即使它们的选择器相等.

要比较元素,您必须检查DOM元素是否相等:

this === element.get(0);
Run Code Online (Sandbox Code Playgroud)


Nik*_*kov 18

您可以使用jQuery is()函数.原始答案可以在这里找到.

function colorize(element) {
    element.parent().find('span').each(function() {
        if ( $(this).is(element) ) {
            $(this).css('background','yellow');
        } else {
            $(this).css('background','pink');
        }
    });
}
Run Code Online (Sandbox Code Playgroud)


Bru*_*oLM 17

使用 isEqualNode

this.isEqualNode(element)
Run Code Online (Sandbox Code Playgroud)

或使用isSameNode(已弃用)

this.isSameNode(element)
Run Code Online (Sandbox Code Playgroud)

  • 注意,`a.isEqualNode(b)`不等同于'a == b`.`document.createElement('div').isEqualNode(document.createElement('div'))```true`,即使节点是不同的元素. (2认同)
  • 您链接到的文档没有说明不推荐使用 `isSameNode`。为什么说是? (2认同)