2013-04-02 44 views
0

我有以下代碼偵聽插入的DOM節點類不被傳遞

$('#box').on('DOMNodeInserted', function(e) { 
    var news = e.target.className.split(" "); 
    if (news[news.length-1].indexOf("today")){ 
     //do something      
    } 
}); 

當一個節點被插入時,上述代碼是應該檢查類,看它是否具有字符串「今天」。插入HTML的結構是這樣的......

<div class="posts news today"> 

如果有「今天」,它應該「做什麼」

的問題是,由於某種原因,上述功能顯示使得插入節點具有一類

"" 

即使所插入元件是

<div class="posts news today"> 

然而,已經存在的元素顯示正確的類

posts news today 

問題就出在這代碼的某個地方,但我不知道爲什麼插入節點將被解釋爲沒有一類,而現有的節點做。

爲了清楚起見,此代碼

$('#box').on('DOMNodeInserted', function(e) { 
    var news = e.target.className; 
    console.log(news); 
}); 

對於已經在頁面加載存在的元素,但顯示「」爲插入的元素輸出正確的類名。如上所述,插入的元素包含正確的類信息,它只是不被上面的代碼解釋。

+1

你能告訴我們你插入? –

+2

-1 == true,您需要測試indexOf是否等於-1,而不是等同於它。 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/indexOf –

+0

只要使用'if($(e.target).hasClass(「today」)){' – Ian

回答

3

您正在使用jQuery - 爲什麼不在任何地方使用它?

if ($(e.target).hasClass('today')) { 
    // ... 
} 

http://api.jquery.com/hasClass

+1

+1 - 太慢了! – adeneo

+0

問題不在於該類未被正確比較,而是因爲沒有插入節點檢測到類信息,只有已存在的類。 「e.target.className」在插入的節點上等於「」。 – Justin

+1

你能告訴我們一個可以工作的[jsfiddle](http://jsfiddle.net)嗎?這一個在Chrome瀏覽器工作正常:http://jsfiddle.net/mblase75/zuWKk/ – Blazemonger