2011-10-09 112 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'); 
     } 
    }); 
} 
相關問題