2013-12-19 35 views
2

http://jsfiddle.net/PhilFromHeck/KzSxT/的Javascript比較對象元素

在這個小提琴,你可以在Javascript代碼行38,我曾經嘗試不工作的比較看。我相信這是因爲其中一個變量是一個Object,另一個是Element;有沒有人有任何建議,我怎麼能找到這兩者之間的匹配?

menuID[0] = document.getElementById('menuOne'); 
menuID[1] = document.getElementById('menuTwo'); 
menuID[2] = document.getElementById('menuThree'); 
menuID[3] = document.getElementById('menuFour'); 
$('.menu').mouseenter(function() { 
    for (var i = 0; i < 3; i++) { 
    if(menuID[i] == $(this)){ 
     //this condition is not met, there's an alert which will add more detail in the fiddle 
    } 
    } 
} 

回答

2

你想使用jQuery的.is()這個。

if($(this).is(menuID[i])){ 
+0

減少jQuery,不是更多的更好的答案在這裏。是;這會起作用,但是當你想要的只是對象本身時,你基本上是打包並解開對象。 – Retsam

+0

@ Retsam:是的,我意識到了。無論如何,我會在這裏留下。 –

4

方法document.getElementById返回一個DOM元素而不是一個jQuery對象。在mouseenter事件處理程序中,this也引用DOM元素。

所以爲了對它們進行比較,你不應該轉換this到jQuery對象:

if (menuID[i] === this) { ... } 
+0

我沒有想到這一點。這可能比我的回答好。 –

0

的幾個問題我在這裏看到:

一個是簡單的,在你的jsfiddle,第一您列出的4行代碼在底部塊運行之前未運行。我不確定爲什麼你有一個你附加到window.onload和document.ready()函數的init函數;但你會想確保init運行。

其次;正如VisioN所說,我認爲主要的問題是你試圖比較一個圍繞DOM元素$(this)的jQuery包裝器與DOM元素(getElementById的結果)。正如他所說,this == menuID[i]將工作。

在設計層面,爲什麼不簡單地使用id來標識元素? this.id會給你的ID;爲什麼不簡單地使用它來確定你正在查看哪個菜單div?