3

我有以下XML坐在VAR在javascript稱爲RoomPriceInfo:IE9沒有得到XML節點的 '孩子'

<?xml version="1.0" encoding="UTF-8"?> 
<BkgItemHotelRoomPrices CurrCode="EUR"> 
    <RoomType Code="DB" Count="1" Desc="Double" Age="0"> 
    <PriceInfo EndDate="2011-12-17" AgentMarkup="0.0" MarkupPerc="0.1075" FitRdg="0.25" MarkupPrice="48.73" AgentPrice="48.75" StartDate="2011-12-11" Nights="7" FitRdgPrice="48.75" CurrDec="2" CurrDecPrice="48.75" SuppPrice="44.0"/> 
    </RoomType> 
</BkgItemHotelRoomPrices> 

和下面的代碼:

DBRoomPrice = RoomPriceInfo.doXPath("//RoomType[@Code='DB']"); 
alert(DBRoomPrice[0].children.length); 

在FF7在Ubuntu和WinXP上的FF8我收到1的警報,這是正確的。但是,在WinXP上的IE8和Windows 7上的IE9下沒有任何反應。它只是靜靜地死去。

請任何人都可以對此有所瞭解嗎?如果我在DOM對象上做了一個getElementById,然後問那個孩子,那麼IE9 & IE9的行爲是正確的。

+0

請不要」用你的名字簽署你的問題,我們可以在右下角的用戶徽章上看到它。有關更多詳細信息,請參見常見問題解答:http://stackoverflow.com/faq – Polynomial

回答

0

它可能無法解決問題,但..你應該使用childNodes而不是兒童屬性來訪問子節點。我不確定哪一個更好,但我確定childNodes肯定是廣泛支持的。可能是微軟也這樣做了嗎?!

+0

'childNodes'還包含文本節點(不僅僅是元素),所以這不是一個好的通用解決方案。 –

10

Internet Explorer(包括版本11!)不支持XML元素的.children屬性。

如果你想獲得子元素的數量,使用element.childElementCount(IE9 +):

element.children.length; // Does not work in IE on XML elements 
element.childElementCount; // Works in every browser 

如果你只是想知道一個元素是否有孩子,你還可以檢查是否element.firstElementChild(或element.lastElementChild )不爲空。該酒店在IE9 +支持:

element.children.length === 0;  // All real browsers 
element.firstElementChild !== null; // IE 9+ 

如果你想通過XML節點的所有子元素進行迭代,使用childNodes並通過排除非元素節點的nodeType

for (var i = 0, len = element.childNodes.length; i < l; ++i) { 
    var child = element.childNodes[i]; 
    if (child.nodeType !== 1/*Node.ELEMENT_NODE*/) continue; 
    // Now, do whatever you want with the child element. 
}