IE9 НЕ получает «потомков» узла XML - PullRequest
4 голосов
/ 21 ноября 2011

У меня есть следующий XML, содержащийся в переменной с именем RoomPriceInfo в javascript:

<?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 и FF8 на WinXP я получаю предупреждение 1, что правильно. Однако под IE8 на WinXP и IE9 на Windows 7 ничего не происходит. Он просто тихо умирает.

Пожалуйста, кто-нибудь может пролить свет на это? Если я сделаю getElementById для объекта DOM, а затем запросю детей для этого, то IE8 и IE9 будут работать правильно.

Ответы [ 2 ]

14 голосов
/ 08 октября 2013

Internet Explorer (включая версию 11!) Не поддерживает свойство .children для элементов XML.

Если вы хотите получить количество дочерних элементов, используйте 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.
}
0 голосов
/ 13 декабря 2011

Это может не решить проблему, но .. вы должны использовать childNodes вместо дочерних свойств для доступа к дочерним узлам. Я не уверен, какой из них лучше, но я точно знаю, что childNodes широко поддерживается ... может быть, Microsoft тоже сделала это?!

...