firstElementChild在Internet Explorer 7中不起作用...我的选择是什么?

时间:2011-06-13 16:24:38

标签: javascript

考虑下面的JavaScript:

var v;
if (this.children.length > 0) {
    v = this.firstElementChild.value;
}

这适用于现代版本的FireFox和Chrome,但this.firstElementChild.value会在Internet Explorer 7-8中引发异常。我还有另一种方法可以让它适用于所有浏览器吗?

更新 - 最终解决方案

我选择了以下内容:

v = (this.firstElementChild || this.children[0] || {}).value - 感谢所有人。

5 个答案:

答案 0 :(得分:8)

this.firstElementChild应该适用于所有重要的浏览器栏IE< = 9和Firefox 3(QuirksMode)。

除了IE< = 9将注释节点计为元素节点(QuirksMode)之外,

this.children[0]将在每个重要的浏览器栏Firefox 3中工作。这对您来说可能是也可能不是问题。

全能系统是这样的:

var node = this.firstChild,
    firstElementChild = null;

for ( ; node; node = node.nextSibling) {
    if (node.nodeType === 1) {
        firstElementChild = node;
        break;
    }
}
然后

firstElementChild将成为第一个元素子元素(如果存在),否则为null。出于性能原因,最好在执行循环之前查看this.firstElementChild是否存在。

答案 1 :(得分:7)

我不知道,也许是this.children[0].value

答案 2 :(得分:0)

如果您的代码在事件处理程序中并且该函数与“attachEvent”绑定,则“this”关键字绑定到“window”对象而不是HTMLElement。 尝试:

function doSomething(e) {
    var targ;
    if (!e) var e = window.event;
    if (e.target) targ = e.target;
    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
        targ = targ.parentNode;
}

检查http://www.quirksmode.org/js/events_properties.html

答案 3 :(得分:0)

尝试以下方法:

var v;
if (this.children.length > 0) {
    v = this.firstChild;
}
在现代浏览器中,althogh第一个孩子通常会是文本段

答案 4 :(得分:0)

我们在IE11遇到了这个问题,发现.firstChild()是所有浏览器的可靠修复。