这个有和作用

plglenn22 2010-01-07 10:22:55
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);
}
}
}
...全文
87 14 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dh20156 2010-01-08
  • 打赏
  • 举报
回复
参见: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);
}
}
}
lodachi 2010-01-08
  • 打赏
  • 举报
回复
return 的意思就是直接返回 下面的就不执行了

单纯一个return; 相当于 return null;
Objector 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 plglenn22 的回复:]
非空返回了,还执行下面的语句么?
[/Quote]

注意,还有一个非操作符(!)
if(!Elem) { return }
这句话的意思是:

1. 如果Elem为null, undefined, '', 0中的任何一个,那么!Elem布尔表达式将返回true, 执行return
2. 如果Elem为其他值,跳过return,继续执行代码。

所以如果Elem为空,则代码不会往下继续执行,这本来就是我们想要的
街头小贩 2010-01-08
  • 打赏
  • 举报
回复
学习一下!
yixianggao 2010-01-08
  • 打赏
  • 举报
回复
再次修订了一些细节,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, '') != "";
}
yixianggao 2010-01-08
  • 打赏
  • 举报
回复
不好意思,函数改名了,下面没同步

L@_@K
function IsNullOrUndefined(value) {
return value === null || value === undefined;
}

// ...
if(IsNullOrUndefined(Elm))
{
return;
}
// ...


[Quote=引用 5 楼 plglenn22 的回复:]
if(dchild.nodeType == 3 && ! dchild.nodeValue.replace(/\s/g, ''))
[/Quote]
alert(!""); // true


nodeType == 3 表示该节点为元素节点,后半句表示节点内容非空,建议改为

function IsElementNode(node) {
return node.nodeType == 3;
}

function NodeValueIsEmpty(node) {
return node.nodeValue.replace(/\s/g, '') == "";
}

if(IsElementNode(dchild) && !NodeValueIsEmpty(dchild))

代码就应该清楚明了!
yixianggao 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 plglenn22 的回复:]
  if( ! Elm)
      {
        return;
      }
什么意思
[/Quote]
alert(!{}); // false, {} 与 element 类似 。
alert(!null); // true
alert(!undefined); // true

虽然代码执行正确,但是编码方式很垃圾!建议改为
function IsNullOrUndefined(value) {
return value === null || value === undefined;
}

// ...
if(IsUndefinedOrNull(Elm))
{
return;
}
// ...

代码就应该清楚明了,否则就是垃圾!
eduyu 2010-01-07
  • 打赏
  • 举报
回复
当然不执行了,但是可以肯定的是这个函数会对所有text node遍历一次,一遍清除所有空节点。
wcwtitxu 2010-01-07
  • 打赏
  • 举报
回复
清除文本

---------------------------
下面 是 Elm 为空时,返回
不是非空时,返回

if (!Elm) {
return;
}

------------------------------

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

if (dchild是文本节点 并且 dchild是空白节点 )
plglenn22 2010-01-07
  • 打赏
  • 举报
回复
if(dchild.nodeType == 3 && ! dchild.nodeValue.replace(/\s/g, ''))
plglenn22 2010-01-07
  • 打赏
  • 举报
回复
非空返回了,还执行下面的语句么?
sohighthesky 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 plglenn22 的回复:]
  if( ! Elm)
      {
        return;
      }
什么意思
[/Quote]
如果Els不为null "",undefined ,就是空的意思
sohighthesky 2010-01-07
  • 打赏
  • 举报
回复
在非ie中如果xml或html源文件中有回车换行等会生成空文本节点nodeType为3内容为""所以
有时为了操作节点方便,需要清除
plglenn22 2010-01-07
  • 打赏
  • 举报
回复
if( ! Elm)
{
return;
}
什么意思
发帖
JavaScript

8.7w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
帖子事件
创建了帖子
2010-01-07 10:22
社区公告
暂无公告