Я пишу что-то академическое, где у меня есть html-элементы пространства имен, такие как:
<ns:LinkList id="sitesuteis" cssClass="classone">
<ns:LinkItem id="LI1" href="http://www.ibt.pt/" target="_blank">IBT</ns:LinkItem>
<ns:LinkItem id="LI2" href="http://http://html5demos.com/t/" target="_blank">HTML5 Demos</ns:LinkItem>
<ns:LinkItem id="LI3" href="http://diveintohtml5.ep.io/" target="_blank">Dive into HTML5</ns:LinkItem>
<ns:LinkItem id="LI4" href="http://html5boilerplate.com/" target="_blank">HTML5 Boilerplate</ns:LinkItem>
</ns:LinkList>
Теперь в JavaScript я пытаюсь:
var elements = document.getElementsByTagName('ns:LinkItem');
element = elements[0];
console.log(element.getAttribute('id'));
//I get a correct value in all browsers
пытается получить все дочерние узлы в моих элементах [0]. Работает нормально во всех браузерах, кроме -IE lt 9-
Я пытался:
var children = element.getElementsByTagName('ns:LinkItem');
console.log(children.length);
и
var children = Array();
for (i=0; i<element.childNodes.length; i++){
alert(element.childNodes[i].nodeName);
if (element.childNodes[i].nodeName=="NS:LINKITEM"){
children.push(element.childNodes[i]);
}
}
console.log(children.length);
в обоих console.logs, я получаю правильную длину (4) в каждом браузере, кроме IE8 или меньше, я получаю 0.
Согласно @Shadow Wizard В IE8 и ниже свойство canHaveChildren элемента имеет значение false, что означает тупик - браузер просто не поддерживает наличие дочерних узлов для этого тега, так же, как
не может есть дочерние узлы, например. Я попробовал это, и это правда. Если я попытаюсь:
element.parentNode
в IE 8 или менее, я получаю div, который содержит мою разметку, а в других браузерах я получаю своего родителя
Мне действительно нужен хак для этого, и я не могу его найти.