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. 
}