2012-09-12 262 views
0

我有一個for循環,我的控制檯跟蹤顯示我的變量是正確的。 epid由另一種方法確定。javascript if語句for循環找不到==

for (var i=0; i< $('#slideshow > div').length; i++) { 
    var divid = $('#slideshow > div').eq(i); 
    console.log(divid) 
    console.log(epid) 
    if (divid == epid) { 
    alert("equal " + epid); 
    } else { 
    console.log("blah"); 
    }; 
}; 

在循環中的某一點,控制檯顯示該元素相同,但警報不會彈出。 CONSOLE:

<div style=​"height:​ 100%;​ display:​ none;​ " id=​"ep5">​…​</div>​ 
<div style=​"height:​ 100%;​ display:​ none;​ " id=​"ep6">​…​</div>​ 
blah 
<div style=​"height:​ 100%;​ display:​ none;​ " id=​"ep6">​…​</div>​ 
<div style=​"height:​ 100%;​ display:​ none;​ " id=​"ep6">​…​</div>​ 
blah 
<div style=​"height:​ 100%;​ display:​ none;​ " id=​"ep7">​…​</div>​ 
<div style=​"height:​ 100%;​ display:​ none;​ " id=​"ep6">​…​</div>​ 
blah 
+1

真的,你不應該寫這樣的循環。至少,將'$('#slideshow> div')'的值保存在一個變量中。在編寫代碼的方式中,DOM查找將在循環的每次迭代中完成**兩次**。 – Pointy

+0

你在「for」循環中尋找什麼?你在尋找一個特定的DOM對象嗎?你正在尋找匹配DOM對象的內容嗎?究竟是什麼? – jfriend00

回答

1

divid是一個jQuery對象。除非該變量指向完全相同的jQuery對象,否則它絕不會匹配另一個變量。 =====比較對象引用以查看它們是否完全相同的對象。它不會比較這些對象的內容。

如果EPID是一個DOM對象,你的代碼的一點是比較DOM對象,那麼你應該使用.get(i)[i],而不是.eq(i)兩個epiddivid

var divid = $('#slideshow > div').get(i); 

假設epid是一個DOM對象,您正在尋找幻燈片中的哪個項目與該對象匹配,您可以擁有更高效且正確的代碼,如下所示:

var items = $('#slideshow > div'); 
for (var i = 0; i < items.length; i++) { 
    var divid = items[i]; 
    if (divid === epid) { 
     alert("equal " + epid); 
    } else { 
     console.log("blah"); 
    } 
} 

如果,你只是想知道epid是幻燈集在什麼指數,你不需要for循環手動找到它 - 你可以是這樣做的:

var index = $('#slideshow > div').index(epid); 
+0

謝謝...我還必須做epid.get(0);所以我正在處理元素而不是你指出的$對象。這對我來說是一個巨大的教訓,非常感謝。 – HappaGirl

0

我從你的代碼中假設你想要比較元素的Html?

for (var i=0; i< $('#slideshow > div').length; i++) { 
    var divid = $('#slideshow > div').eq(i); 
    console.log(divid) 
    console.log(epid) 
    if (divid.html() == epid.html()) { 
    alert("equal " + epid); 
    } else { 
    console.log("blah"); 
    }; 
}; 
0

您在這裏比較兩個對象..如果是完全一樣的物體..因此,而不是==使用它只會是真實===。也讓我們假設,如果每個div有一個id,你可以比較它的id屬性..

for (var i=0; i< $('#slideshow > div').length; i++) { 
    var divid = $('#slideshow > div').eq(i); 
    var dID = divid.attr('id'); 
    var eID = epid.attr('id'); 
    console.log(divid); 
    console.log(epid); 
    if(dID != '' && eID != ''){ 
     if (dID == eID) { 
      alert("equal " + epid); 
     } else { 
     console.log("blah"); 
     }; 
    } 
}; 

如果股利已經具備了成爲一個ID ..或一類是特定於每個這樣只會工作div ..