- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
charcode与keycode
IE和FireFox处理childNodes的异同
javascript中,可能会用到getElementsByTagName和childNodes来实现对节点的遍历。但是getElementsByTagName对DOM结构复杂的树遍历就明显不如用childNodes,因为childNodes能更好的处理DOM的层次结构暂不比较他们的优劣,在这里我想说下的是用childNodes遍历DOM节点时,Firefox和IE的一个细微差别。
nodeName=#text,你遇到过么? 下面这里给出一个例子:
script type=text/javascriptfunction view(){var pn1=document.getElementById(pn1);var pn2=document.getElementById(pn2);
var childs1=pn1.childNodes;var childs2=pn2.childNodes;
alert(length of pn1: +childs1.length+--length of pn2: +childs2.length);}/scriptinput type=button value=查看节点长度 onclick=view(); /
div id=pn1!--第一个遍历对象,节点之间留有空格和回车--divfirst/divdivsecond/divdivthird/div/div
div id=pn2!--第二个遍历对象,除注释外,节点间无空格回车--divfirst/divdivsecond/divdivthird/div/div
上面的例子有两个对象,用IE和Firefox运行会有两个不同的结果:IE的结果是3:3;而Firefox则是7:3。怎么会有这种情况呢?
在结构上,对象1和对象2不同的是对象1的子节点间有回车或者空格,而对象2则是一行写到尾。大家都应该想到了吧,IE是将一个完整标签作为一个节点。而Firefox除了上述的的情况外,也把一个标签的结束符“”到下一个标签的起始符“”之间的内容(除注释外,包括任何的文字、空格、回车、制表符)也算是一个节点了。而且这种节点也有它们自己独特的属性和值--nodeName=#text。
Firefox中,如果html按照大众化的 (其实就是各种html编辑器的默认的) 写法,用childNodes获得的子节点减1除2,那大概就是大家所需要的节点数了。(比方说只有3个html元素节点,节点间夹着有2个#text的节点,并且一头一尾各1个,那就是7个节点了。但是不推荐通过这样的方法获得真实的节点数,因为真实的节点数是要看html里面的层次结构。)
在实际运用中,Firefox在遍历子节点时,在for循环里不妨加上:if(childNode.nodeName==#text) continue;或者nodeType == 1。这样,便跳过不需要的操作,使程序运行的更有效率。
keyCode和charCode键盘事件拥有两个属性,keyCode和CharCode,他们之间有一些不一样之处。keyCode表示用户按下键的实际的编码,而charCode是指用户按下字符的编码。keyCode :
IE 与? w3c兼容浏览器 keydown ,keyup 时 event 的 keyCode 为实际按键的值 。
例如:
shift + a ==? 16 + 65
charCode :
?w3c兼容浏览器 在 keypress(shift等非实际值键忽略) 时 event 存在 charCode 属性为对应字符值,keyCode 统一为0。
? IE 只有 keyCode, 则在 keypress(shift等非实际值键忽略) 时仍然采用 keyCode ,不过此时为对应字符值,没有charCode 属性。
?例如:
shift + a : {
ie: keyCode :97 ,charCode:undefined
firefox : keyCode:0 ,charCode:97
}
ps:
注意不能直接 code 与 字符比较 ,比如过滤某些字符?
不能够? code a ,而应该 char_ a ,code 做为数字和字符串比较,会强制字符串转化为数字进行比较 ,而a ,parse数字以后为 NaN ,则 code a ,code a ,code ==a 都为 false。 IE下keyCode:对于keypress事件,表示按下按键的Unicode字符;对于keydown/keyup 事件,表示按下按键的数字代码。
无charCode属性。
DOM标准下
keyCode:
文档评论(0)