热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

精通JavaScript纠正cleanWhitespace函数

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

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

还转一个可以用的
代码如下:

function cleanWhitespace2(node) {
var notWhitespace = /\S/;
for (var i=0; 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;ivar node=oEelement.childNodes[i];
if(node.nodeType==3 && !/\S/.test(node.nodeValue)){node.parentNode.removeChild(node)}
}
}

还转一个可以用的
代码如下:

function cleanWhitespace2(node) {
var notWhitespace = /\S/;
for (var i=0; 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;ivar node=oEelement.childNodes[i];
if(node.nodeType==3 && !/\S/.test(node.nodeValue)){node.parentNode.removeChild(node)}
}
}

推荐阅读
  • 关于进程的复习:#管道#数据的共享Managerdictlist#进程池#cpu个数1#retmap(func,iterable)#异步自带close和join#所有 ... [详细]
  • WPF MVVM: 动态添加控件与数据绑定的最佳实践
    本文介绍如何在WPF应用程序中使用MVVM模式动态添加控件并进行数据绑定。通过示例展示如何创建一个虚拟键盘,其中包含多个按键。 ... [详细]
  • 本文详细介绍了如何使用Layui框架实现动态和静态数据表的分页功能,具有较高的实用性和参考价值。适合需要开发管理后台的开发人员参考。 ... [详细]
  • mybatis 详解(七)一对一、一对多、多对多
    mybatis详解(七)------一 ... [详细]
  • 本文介绍了编程语言的基本分类,包括机器语言、汇编语言和高级语言的特点及其优缺点。随后详细讲解了Python解释器的安装与配置方法,并探讨了Python变量的定义、使用及内存管理机制。 ... [详细]
  • 在开发板的启动选项中看到如下两行:7:LoadBootLoadercodethenwritetoFlashviaSerial.9:LoadBootLoadercodethenwri ... [详细]
  • 本文介绍了如何使用 Gesture Detector 和 overridePendingTransition 方法来实现滑动界面和过渡动画。 ... [详细]
  • 本文通过一个具体的案例,展示了如何使用 Python 爬虫技术从京东网站爬取手机的价格和参数。最近发布的 iPhone X 虽然价格昂贵,但不妨碍我们探索其他高性价比的国产手机。 ... [详细]
  • 驱动程序的基本结构1、Windows驱动程序中重要的数据结构1.1、驱动对象(DRIVER_OBJECT)每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱 ... [详细]
  • 编译过程涉及多个阶段,每个阶段都有其特定的任务和方法。本文详细介绍了编译过程的五个阶段:词法分析、语法分析、语义分析与中间代码生成、优化和目标代码生成。通过这些阶段,编译器将源代码转换为目标代码。 ... [详细]
  • 作为一名饼干爱好者,我尝试过各种各样的饼干。虽然威化饼和消化饼都有其独特的风味,但我对柠檬夹心饼干情有独钟。这种饼干不仅口感丰富,还带有清新的柠檬香味。 ... [详细]
  • 在 PHP 中,使用 `continue` 关键字结合数字可以有效地终止嵌套的 `foreach` 循环。本文将详细介绍如何使用 `continue` 加数字来控制不同层次的循环。 ... [详细]
  • 本文整理了 DedeCMS 中常用的标签分类及其具体应用方法,包括标题调用、导航调用、文章列表、子栏目调用、尾部信息调用等。 ... [详细]
  • 深入理解Select、Poll和Epoll
    本文详细介绍了三种常用的I/O多路复用技术:Select、Poll和Epoll。通过对比它们的工作原理和性能特点,帮助读者更好地选择适合的I/O模型。 ... [详细]
  • 阿里云OSS访问权限错误:AccessDenied
    在使用阿里云对象存储服务(OSS)时,遇到AccessDenied错误,提示您无权访问指定对象,原因可能与Bucket的ACL设置有关。 ... [详细]
author-avatar
双子汐晨_312
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有