2011-10-09 104 views
25

我需要将一个元素传递给一个函数,然后在遍历父项时匹配该特定元素。捕捉(对于像我这样不懂的人)是因为这个元素没有id。在下面的例子中,我希望每一个元素变成粉红色,除了一个点击应该变黄jQuery - 如何检查两个元素是否相同?

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)); 
}); 
+2

见http://stackoverflow.com/questions/4441135/how-to-compare-two-doms-or-dom-nodes-in-general –

回答

37

比较JQuery的对象将永远不会返回true,因为每个jQuery对象是迈上了一个新的对象,即使他们的选择是等于。

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

this === element.get(0); 
+0

还是同样的问题。 –

+1

@A-OK我发现'element'不是一个DOM元素。使用'this === element.get(0)'。 –

+1

谢谢,这工作。请更新您的答案,以防其他人需要。 :) –

1

你不必。您始终将特殊样式应用于一个特定元素,因此将它们全部着色,然后更改特定元素的颜色。

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

    element.css('background','yellow'); 
} 

与您比较的问题是您正在比较两个对象(jQuery对象)。当比较对象,除非他们指向同一件事,他们被认为是不平等的:

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

您可以解决此通过移除jQuery的包装:

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'); 
     } 
    }); 
} 

这样,你将DOM元素与DOM元素进行比较,而不是苹果与橙子或对象之间的对象。

+1

确实如此,但它有点骇人听闻。 –

+0

谢谢,但这个例子不是问题,只是我对问题的解释。我需要检查与find匹配的元素是否是传递给该函数的相同元素。 –

+1

已更新。当你停止使用jQuery时,很多问题都会消失;) – Zirak

15

使用isEqualNode

this.isEqualNode(element) 

或者使用isSameNode(不建议使用)

this.isSameNode(element) 
+2

请注意,'a.isEqualNode(b)'不等于'a == b'。 'document.createElement('div')。isEqualNode(document.createElement('div'))'''''即使节点是不同的元素。 –

+1

您链接到的文档中不提供关于'isSameNode'的任何内容不推荐使用。你为什么这么说? –

14

您可以使用jQuery的is()功能。原始答案可以在here找到。

function colorize(element) { 
    element.parent().find('span').each(function() { 
     if ($(this).is(element)) { 
      $(this).css('background','yellow'); 
     } else { 
      $(this).css('background','pink'); 
     } 
    }); 
} 
相关问题