最近一直使用node觉得蛮好用的,不过要兼容event.target(IE为window.event.srcElement),这个可以判断浏览器做到。
但是有个大问题,就是node在firefox和其他标准浏览器解释childnodes时会将空格,换行等算进去。
于是我想到了一个办法,可是不知道怎么去实现,想了很久都没有做出来。
原理是这样的:页面一载入将所有nodeName为#text的元素去掉,那么当我们写任何node对象的属性时就不会出现IE,firefox等不一致的问题了。我的做法是做一个无限级循环,一直循环到某个元素的下面没有子元素位置,但是这样的做法会加重页面的负担。
请大侠们指点一下,改如何去实现?
但是有个大问题,就是node在firefox和其他标准浏览器解释childnodes时会将空格,换行等算进去。
于是我想到了一个办法,可是不知道怎么去实现,想了很久都没有做出来。
原理是这样的:页面一载入将所有nodeName为#text的元素去掉,那么当我们写任何node对象的属性时就不会出现IE,firefox等不一致的问题了。我的做法是做一个无限级循环,一直循环到某个元素的下面没有子元素位置,但是这样的做法会加重页面的负担。
请大侠们指点一下,改如何去实现?
解决方案 »
- linux服务器上<option>标签的点击事件没有效果,window上本地测试有,求原因?
- jquery的 html()方法问题
- 关于外部登陆session值的问题
- JS中动态增加的问题
- 如何在一个table里的某一指定cell增加一个input?
- window.external.NavigateAndFind究竟怎么用?
- 如何将网页中指定的字符串标红?
- 用windows.open(xxx.asp?id="111")打开的窗口能控制大小吗??怎么控制?我不用全屏显示
- 前端工程师的修真秘籍(css、javascript和其它)
- 求助 高人帮忙解下Js加密文件。。。。
- 请问一个JS中层的问题?
- 关于setTimeout功能问题
var $ = function(n) {
return typeof n == "string" ? document.getElementById(n) : n;
}; var ergodicElement = function(n, f) {
var e = $(n);
if(e.nodeType == 1) {
f(e);
}
if(e.firstChild) {
for(var n = e.firstChild; n; n = n.nextSibling) {
ergodicElement(n, f, w);
}
}
};
调用:ergodicElement(document.body, function(e/* 当前循环到的节点 */) {
alert(e.tagName);
});