Heim > Fragen und Antworten > Hauptteil
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题页</title>
<style type="text/css">
.item{float:left;width:100px;height:100px;margin-left:50px;margin-top:50px;background:#ccc;}
#container{overflow:hidden;width:500px;padding-right:50px;border:1px solid #000;}
</style>
</head>
<script type ="text/javascript">
window.onload = function (){
elems = document.body.childNodes;
for (var i = 0; i < elems.length; i++){
elems[i].onclick = function (e) {
//triggerElement = e ? e.target :event.srcElement;
//alert(triggerElement.nodeName);
alert(this.nodeName);
}
}
}
</script>
<body>
<p id="container">
<p class="item">浮动测试</p>
<p class="item">浮动测试</p>
<p class="item">浮动测试</p>
<p class="item">浮动测试</p>
<p class="item">浮动测试</p>
<p class="item">浮动测试</p>
<p class="item">浮动测试</p>
</p>
<a href="#">呵呵 这是一个链接</a>
<ul>
<li>列表一</li>
<li>列表二</li>
<li>列表三</li>
</ul>
<span>这是一个span</span>
<p>这是一个p</p>
</body>
</html>
以上是测试代码,在firefox/ie7+/chorme下代码都正常运行,但是在ie6下面 li span p 这几个标签的nodeName却没有弹出来(this和event情况相同),这个兼容性问题怎么修复? (确认jq已经修正了该问题,没读过jq源码的孩纸请教了)
ringa_lee2017-04-10 12:47:35
for (var i = 0; i < elems.length; i++){
if (elems[i].nodeType == 1) {
elems[i].onclick = function (e) {
//triggerElement = e ? e.target :event.srcElement;
//alert(triggerElement.nodeName);
alert(this.nodeName);
}
}
}
要加上判断nodeType,因为document.body.childNodes中不仅包括了标签,还有文字。关于node有很多种类型,对应类型码如下。而ElEMENT_NODE才有onclick这个属性,所以TEXT_NODE的节点在onclick时会出错,程序中断了,后面的节点自然无法触发点击事件,所以你会发现LI SPAN P这几个标签没反应,不信你可以先不修改代码,只把html中这几个标签提前到最前面,看是不是可以触发了。
ELEMENTNODE 1
ATTRIBUTENODEDeprecated 2
TEXTNODE 3
CDATASECTIONNODEDeprecated 4
ENTITYREFERENCENODEDeprecated 5
ENTITYNODEDeprecated 6
PROCESSINGINSTRUCTIONNODE 7
COMMENTNODE 8
DOCUMENTNODE 9
DOCUMENTTYPENODE 10
DOCUMENTFRAGMENTNODE 11
NOTATION_NODEDeprecated 12
高洛峰2017-04-10 12:47:35
//在这里加一个判断 if(elems[i].nodeType === 1) { elems[i].onclick = function (e) { //triggerElement = e ? e.target :event.srcElement; //alert(triggerElement.nodeName); alert(this.nodeName); } }