精通JavaScript 纠正 cleanWhitespace 函数

这个函数用在火狐(firefox)上面老是出错,今天仔细研究了下,改正了,希望别人不要遇到这样的问题

 

 1 function cleanWhitespace(element){
 2     //如果不提供参数,则处理整个HTML文档
 3     element = element || document;
 4     //使用第一个子节点作为开始指针
 5     var cur = element.firstChild;
 6     //临时变量用来保存当前节点的下个节点
 7     var tmp;
 8     //一直到没有子节点为止
 9     while (cur != null){
10     //保存当前节点的下个节点
11     tmp=cur.nextSibling
12         //如果节点为文本节点,应且包含空格
13         if ( cur.nodeType == 3 && ! /\S/.test(cur.nodeValue)){
14             //删除这个文本节点
15             element.removeChild( cur );            
16         //否则,它就是一个元素        
17         } else if (cur.nodeType == 1){
18             //递归整个文档
19             cleanWhitespace( cur );
20         }
21         cur = tmp;//遍历子节点
22     }
23 }
 

 还转一个可以用的

 

代码
function cleanWhitespace2(node) {   
     
var notWhitespace = /\S/;   
     
for (var i=0; i < node.childNodes.length; i++) {   
         
var childNode = node.childNodes[i];   
         
if ((childNode.nodeType == 3)&&(!notWhitespace.test(childNode.nodeValue))) {   
             node.removeChild(node.childNodes[i]);   
             i
--;   
         }   
         
if (childNode.nodeType == 1) {   
             cleanWhitespace2(childNode);   
         }   
     }   
}

 如果只清除本节点的空白,不遍历子节点

 

代码
function cleanWhitespace2(oEelement)
{
 
for(var i=0;i<oEelement.childNodes.length;i++){
  
var node=oEelement.childNodes[i];
  
if(node.nodeType==3 && !/\S/.test(node.nodeValue)){node.parentNode.removeChild(node)}
  }
}

 http://www.cnblogs.com/oneroom

 

 

posted @ 2010-03-11 09:43  oneroom  阅读(539)  评论(0编辑  收藏  举报
让别人快乐是慈悲,让自己快乐是智慧!