考虑下面的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
- 感谢所有人。
答案 0 :(得分:8)
this.firstElementChild
应该适用于所有重要的浏览器栏IE< = 9和Firefox 3(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;
}
答案 3 :(得分:0)
尝试以下方法:
var v;
if (this.children.length > 0) {
v = this.firstChild;
}
在现代浏览器中,althogh第一个孩子通常会是文本段
答案 4 :(得分:0)
我们在IE11遇到了这个问题,发现.firstChild()是所有浏览器的可靠修复。