判断是否拥有子节点和特定属性的方法问题

浴火_凤凰 2010-01-26 10:00:43
今天闲来无事,突然想到一些有趣的问题,具体问题如下:
1.在判断一个节点是否拥有子节点的时候,我常常使用node.hasChildNodes方法
if(node.hasChildNodes()){JavaScript code goes here......}

后来想到使用node.childNodes.length来判断。
if(node.childNodes.length!=0){JavaScript code goes here......}


上面的两段代码作用应该一样吧。但是不知道两种用法有什么区别吗?
或者说在性能、执行效率上有所区别?使用哪一种更好一些?

2.在判断一个节点是否拥有特定属性的时候,我常常使用
if(node.getAttribute("name")){JavaScript code goes here......}

或者
if(node.getAttribute("name")!=null){JavaScript code goes here......}


现在又想到几种方法:
if(node.attributes("name")!=null){JavaScript code goes here......}

if(node.hasAttribute("name")){JavaScript code goes here......}

if(node.attributes().getNamedItem("name").value){JavaScript code goes here......}


这些代码的用法不知道又有什么区别?就像上面一样,使用哪一个都一样吗?

3.在判断一个节点是否拥有属性的时候,是使用hasAttributes判断好还是使用attributes.length判断好?

这几个问题基本上是一类的问题,希望高人指点一下!!!
万分感谢!!!
...全文
306 12 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
浴火_凤凰 2010-03-11
  • 打赏
  • 举报
回复
再顶一次,希望有惊喜出现,呵呵。。。。。
浴火_凤凰 2010-03-09
  • 打赏
  • 举报
回复
希望还有其它的答案,等待高手指点。
浴火_凤凰 2010-02-09
  • 打赏
  • 举报
回复
希望还有其它的答案,等待高手指点。
街头小贩 2010-01-28
  • 打赏
  • 举报
回复
在FF下会视为有一个空白的文本节点,不知道是不是bug。
re:
不是firefox的bug!是微软太爱你了!因为whitespace也是节点!在所有的api中都有这种情况
浴火_凤凰 2010-01-28
  • 打赏
  • 举报
回复
谢谢各位了
zx27600 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 warison2008 的回复:]
明显用
if(node.hasChildNodes()){JavaScript code goes here......}
if(node.hasAttribute("name")){JavaScript code goes here......}
因为
node.hasChildNodes()不存在是
if(node.childNodes.length!=0){JavaScript code goes here......}会出错,因为node.childNodes为undefined.
同样的道理,不用
if(node.attributes().getNamedItem("name").value){JavaScript code goes here......}
[/Quote]

同意
qulcc 2010-01-28
  • 打赏
  • 举报
回复
学习了
!
michaelzhouh 2010-01-26
  • 打赏
  • 举报
回复
判断是否有子节点2个方法都可以,但是要注意的是FF下的空白节点。2个div间空了一行,在FF下会视为有一个空白的文本节点,不知道是不是bug。

判断属性,我认为最正确的是用属性的写法,不用节点操作。我以前也经常用node.setAttribute("name","aaa")这种写法,但是这种写法只是标准的操作XML的写法,不是标准的操作html的方法,如果用
node.name==null来判断属性就最正确了,而且还简略些,呵呵。
道光2008 2010-01-26
  • 打赏
  • 举报
回复
明显用
if(node.hasChildNodes()){JavaScript code goes here......}
if(node.hasAttribute("name")){JavaScript code goes here......}
因为
node.hasChildNodes()不存在是
if(node.childNodes.length!=0){JavaScript code goes here......}会出错,因为node.childNodes为undefined.
同样的道理,不用
if(node.attributes().getNamedItem("name").value){JavaScript code goes here......}
yixianggao 2010-01-26
  • 打赏
  • 举报
回复
先抛开浏览器差异不说,从代码的易读性和可维护性来说,

if(node.hasChildNodes()){JavaScript code goes here......}
if(node.hasAttribute("name")){JavaScript code goes here......}

是最可取的!

因为这种写法很干净、易于理解!

《Clean Code》 中特别说明了,建议将判断语句封装为方法
一弗楚 2010-01-26
  • 打赏
  • 举报
回复
<div style="width:200px;height:200px;background-color:red;" onclick="if(this.hasChildNodes()){alert('Yes');} else alert('No');">
</div>
<div style="width:200px;height:200px;background-color:green;" onclick="if(this.childNodes.length!=0){alert('Yes');} else alert('No');">
</div>


1.在判断一个节点是否拥有子节点的时候,我常常使用node.hasChildNodes方法

JScript code

if(node.hasChildNodes()){JavaScript code goes here......}


后来想到使用node.childNodes.length来判断。

JScript code

if(node.childNodes.length!=0){JavaScript code goes here......}



上面的两段代码作用应该一样吧。但是不知道两种用法有什么区别吗?
或者说在性能、执行效率上有所区别?使用哪一种更好一些?

在FF和IE下皆不同
sohighthesky 2010-01-26
  • 打赏
  • 举报
回复
node.hasAttribute("attName");//,not work in IE6,IE7
相关推荐
发帖
JavaScript

8.7w+

社区成员

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