84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
无标题页 浮动测试 浮动测试 浮动测试 浮动测试 浮动测试 浮动测试 浮动测试 呵呵 这是一个链接 列表一 列表二 列表三 这是一个span 这是一个p
浮动测试
这是一个p
以上是测试代码,在firefox/ie7+/chorme下代码都正常运行,但是在ie6下面 li span p 这几个标签的nodeName却没有弹出来(this和event情况相同),这个兼容性问题怎么修复? (确认jq已经修正了该问题,没读过jq源码的孩纸请教了)
小伙看你根骨奇佳,潜力无限,来学PHP伐。
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 1ATTRIBUTENODEDeprecated 2TEXTNODE 3CDATASECTIONNODEDeprecated 4ENTITYREFERENCENODEDeprecated 5ENTITYNODEDeprecated 6PROCESSINGINSTRUCTIONNODE 7COMMENTNODE 8DOCUMENTNODE 9DOCUMENTTYPENODE 10DOCUMENTFRAGMENTNODE 11NOTATION_NODEDeprecated 12
//在这里加一个判断 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
//在这里加一个判断 if(elems[i].nodeType === 1) { elems[i].onclick = function (e) { //triggerElement = e ? e.target :event.srcElement; //alert(triggerElement.nodeName); alert(this.nodeName); } }