2012-11-14 39 views
3

以下代碼似乎在所有瀏覽器中都可以正常工作,但IE8和以下版本除外。Javascript節點在IE8中未定義並且在

$("table.availability").each(function() { 
    var siteName = $(this).parent().siblings("h2").contents().filter(function() { return this.nodeType == Node.TEXT_NODE; }).text() 
    alert(sitename); 
}); 

它獲取一個元素的內容,並去掉子元素中包含的所有內容,只是留下該元素的文本。

我得到的錯誤說Node是未定義的 - 所以我聲明它在js文件的頂部,然後得到關於TEXT_NODE的相同消息,所以我聲明。然後我得到了以下錯誤:

Unable to get property 'TEXT_NODE' of undefined or null reference

誰能幫我解決這個問題或者任何人能想到更好的辦法來得到相同的結果。謝謝。

回答

8

TEXT_NODE常數有value of 3。你可以只使用:

return this.nodeType === 3; 

舊版本的IE只是沒有實現Node接口,但他們仍然按照DOM規範,分配正確的nodeType屬性值。

如果你想用「常量」,你可以自己定義一個Node對象:

var Node = Node || { 
    ELEMENT_NODE: 1, 
    ATTRIBUTE_NODE: 2, 
    TEXT_NODE: 3 
    // etc... if you might need other node types 
}; 
0

我猜你是結構是這樣的:

<h2> 
    text to filter 
    <span>other text</span> 
</h2> 

你試圖過濾掉h2裏的「其他文本」? 如果是這樣 - 爲什麼不在需要的文本週圍添加另一個標記封裝,例如

<h2> 
    <span class="text-to-filter">text to filter</span> 
    <span>other text</span> 
</h2> 

,並做到這一點:

$(this).parent().siblings("h2").find('.text-to-filter').text() 
1

對於IE8及以下版本的節點不工作,改變nodewindow爲我工作。