论坛首页 Web前端技术论坛

DOM操作中TextNode惹的麻烦

浏览 4199 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-19   最后修改:2010-07-29
在DOM遍历中,IE会忽略空白文本节点,但是firefox、chrome等现代浏览器会把空白文本节点识别为TextNode,在访问诸如childNodes、firstChild、lastChild、nextSibling、previousSibling等节点时,可能会遇到TextNode。

  解决方法大致有2种:
  • 以nodeType过滤(一般过滤掉nodeType等于3的文本节点即可);
  • 以tagName过滤(文本节点的tagName不存在);


例如获取nextSibling:
//nodeType
function getNextSibling(node){
    var nextSibling = node.nextSibling;
    while(nextSibling && nextSibling.nodeType !== 1){
        nextSibling = nextSibling.nextSibling;
    }
    return nextSibling;
}


//tagName
function getNextSibling(node) {
  var nextSibling = node.nextSibling;
  while(nextSibling && !nextSibling.tagName){
  	nextSibling = nextSibling.nextSibling;
  }
  return nextSibling;
}


不知道还有没有其它好方法?


补充一下,dom.children(不含空白孩子节点)方法虽然不是w3c标准,但是实际上各个浏览器基本都支持,也算事实标准了。


更新:
最新的浏览器支持以下dom标准,去除空白节点、文本节点:
childElementCount
children
lastElementChild
nextElementSibling
previousElementSibling

https://developer.mozilla.org/en/DOM/element.firstElementChild

不过IE只支持children。
   发表时间:2010-01-21  
第二种方法
如果下一个结点还是文本节点呢
0 请登录后投票
   发表时间:2010-01-21  
谢谢luobin23628指正,已修改。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics