clearTxtNode : function(Elm)
   {
      if( ! Elm)
      {
         return;
      }
      var dchilds = Elm.childNodes, dchild = null;
      for(var i = 0; i < dchilds.length; i ++ )
      {
         dchild = dchilds[i];
         if(dchild.nodeType == 3 && ! dchild.nodeValue.replace(/\s/g, ''))
         {
            Elm.removeChild(dchild);
         }
      }
   }

解决方案 »

  1.   

      if( ! Elm)
          {
            return;
          } 
    什么意思
      

  2.   

    在非ie中如果xml或html源文件中有回车换行等会生成空文本节点nodeType为3内容为""所以
    有时为了操作节点方便,需要清除
      

  3.   

    如果Els不为null "",undefined ,就是空的意思
      

  4.   

       if(dchild.nodeType == 3 && ! dchild.nodeValue.replace(/\s/g, ''))
      

  5.   

    清除文本---------------------------
    下面 是 Elm 为空时,返回 
    不是非空时,返回if (!Elm) {
       return;
    }------------------------------ if(dchild.nodeType == 3 && ! dchild.nodeValue.replace(/\s/g, '')) if (dchild是文本节点   并且  dchild是空白节点 )
      

  6.   

    当然不执行了,但是可以肯定的是这个函数会对所有text node遍历一次,一遍清除所有空节点。
      

  7.   

    alert(!{}); // false, {} 与 element 类似 。
    alert(!null); // true
    alert(!undefined); // true
    虽然代码执行正确,但是编码方式很垃圾!建议改为
    function IsNullOrUndefined(value) {
        return value === null || value === undefined;
    }// ...
    if(IsUndefinedOrNull(Elm))
    {
        return;
    }
    // ...
    代码就应该清楚明了,否则就是垃圾!
      

  8.   

    不好意思,函数改名了,下面没同步L@_@K
    function IsNullOrUndefined(value) {
        return value === null || value === undefined;
    }// ...
    if(IsNullOrUndefined(Elm))
    {
        return;
    }
    // ...alert(!""); // truenodeType == 3 表示该节点为元素节点,后半句表示节点内容非空,建议改为function IsElementNode(node) {
        return node.nodeType == 3;
    }function NodeValueIsEmpty(node) {
        return node.nodeValue.replace(/\s/g, '') == "";
    }if(IsElementNode(dchild) && !NodeValueIsEmpty(dchild))
    代码就应该清楚明了!
      

  9.   

    再次修订了一些细节,lz 觉得这个重构以后代码能读懂不L@_@K
    clearTxtNode : function(Elm) 

        if(IsNullOrUndefined(Elm)) 
            return;
        var dchilds = Elm.childNodes, dchild = null; 
        for(var i = 0, len = dchilds.length; i < len; i++) 
        {
            dchild = dchilds[i];
            if(IsElementNode(dchild) && NodeValueIsNotEmpty(dchild)) 
            {
                Elm.removeChild(dchild); 
            }
        } 
    }function IsNullOrUndefined(value) {
        return value === null || value === undefined;
    }function IsElementNode(node) {
        return node.nodeType == 3;
    }function NodeValueIsNotEmpty(node) {
        return node.nodeValue.replace(/\s/g, '') != "";
    }
      

  10.   


    注意,还有一个非操作符(!)
    if(!Elem) { return }
    这句话的意思是:1. 如果Elem为null, undefined, '', 0中的任何一个,那么!Elem布尔表达式将返回true, 执行return
    2. 如果Elem为其他值,跳过return,继续执行代码。所以如果Elem为空,则代码不会往下继续执行,这本来就是我们想要的
      

  11.   

    return 的意思就是直接返回 下面的就不执行了 单纯一个return; 相当于 return null;
      

  12.   

    参见:http://www.jslab.org.cn/?tag=resetChildNodes  clearTxtNode : function(Elm)
      {/*清除指定DOM节点Elm下的#text节点(标签之间的空白节点)*/
          if( ! Elm)
          {/*如果未指定DOM节点或该节点不存在,则退出此程序*/
            return;
          }
          var dchilds = Elm.childNodes, dchild = null;/*取该节点下所有子节点*/
          for(var i = 0; i < dchilds.length; i ++ )
          {/*遍历它们,如果发现它们中有谁是#text节点,则移除*/
            dchild = dchilds[i];
            if(dchild.nodeType == 3 && ! dchild.nodeValue.replace(/\s/g, ''))
            {
                Elm.removeChild(dchild);
            }
          }
      }