如何解决firstElementChild在Internet Explorer 7中不起作用...我有什么选择?
| 考虑以下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
-谢谢大家。
解决方法
我不知道,也许
this.children[0].value
?
, this.firstElementChild
应该在所有重要的IE <= 9浏览器栏和Firefox 3(QuirksMode)中起作用。
“ѭ5”将在每个重要的浏览器栏中运行Firefox 3,但IE <= 9会将注释节点视为元素节点(QuirksMode)。这可能对您来说不是问题。
通用系统是这样的:
var node = this.firstChild,firstElementChild = null;
for ( ; node; node = node.nextSibling) {
if (node.nodeType === 1) {
firstElementChild = node;
break;
}
}
如果存在第一个元素子元素,则firstElementChild
将成为第一个子元素,否则null
。出于性能原因,最好在执行循环之前先查看to4是否存在。
, 如果您的代码在事件处理程序中,并且该函数与\“ 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。
, 尝试以下方法:
var v;
if (this.children.length > 0) {
v = this.firstChild;
}
在现代浏览器中,第一个孩子通常将是文本段
, 我们在IE11中遇到了这个问题,并发现.firstChild()是所有浏览器中的可靠修复程序。