最近一直使用node觉得蛮好用的,不过要兼容event.target(IE为window.event.srcElement),这个可以判断浏览器做到。
但是有个大问题,就是node在firefox和其他标准浏览器解释childnodes时会将空格,换行等算进去。
于是我想到了一个办法,可是不知道怎么去实现,想了很久都没有做出来。
原理是这样的:页面一载入将所有nodeName为#text的元素去掉,那么当我们写任何node对象的属性时就不会出现IE,firefox等不一致的问题了。我的做法是做一个无限级循环,一直循环到某个元素的下面没有子元素位置,但是这样的做法会加重页面的负担。
请大侠们指点一下,改如何去实现?

解决方案 »

  1.   


        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);
    });
      

  2.   

    无视JQ,现在的前端全被JQ惯坏了,没有好好学基础的,迟早害了自己