Javascript命名空间的html元素

And*_*dez 5 html javascript internet-explorer dom

我正在写一些学术性的东西,我有命名空间的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>
Run Code Online (Sandbox Code Playgroud)

现在,在javascript我正在尝试:

    var elements = document.getElementsByTagName('ns:LinkItem');
    element = elements[0];
    console.log(element.getAttribute('id'));
    //I get a correct value in all browsers
Run Code Online (Sandbox Code Playgroud)

试图在我的元素[0]中获取所有ChildNodes.它适用于所有浏览器,但-IE lt 9-除外

我试过了:

var children = element.getElementsByTagName('ns:LinkItem');
console.log(children.length);
Run Code Online (Sandbox Code Playgroud)

和:

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);
Run Code Online (Sandbox Code Playgroud)

在两个console.logs中,除了IE8或更少,我得到每个浏览器中正确的长度(4),我得到0.

根据@Shadow向导在IE8及以下版本中,元素的canHaveChildren属性为false,这意味着死胡同 - 浏览器根本不支持为此标记
设置子节点,例如,不能有子节点的方式.我试过了,这是真的.如果我尝试:

element.parentNode  
Run Code Online (Sandbox Code Playgroud)

在IE 8或更低版本中,我得到包含我的标记的div,在其他浏览器中,我得到了我的父母

我真的需要一个黑客,我似乎找不到一个.

Sha*_*ard 1

在 Internet Explorer 8 及更低版本中,canHaveChildren该元素的属性是falsethis 意味着死胡同,浏览器根本不支持该标记具有子节点,就像<br />不能具有子节点一样。

不过,此问题已在 Internet Explorer 9 中得到修复。