在Js中得到元素的子元素集合注意事项

http://www.cnblogs.com/phonefans/archive/2008/09/04/1283739.html

在Js中得到元素的子元素集合注意事项

费话少说,直接看例子:

1 <ul>
2  <li>this‘s one</li>
3  <li>this‘s two</li>
4  <li>this‘s three</li>
5  <li>this‘s four</li>
6 <ul>

想用JS得到ul下的四个子元素,开始我代码这么写:

1 var objs = document.getElementsByTagName("ul")[0].all;
2 for(var i=0;i<objs.length;i++){
3  alert(objs[i].innerHTML);
4 }

 测试结果:在IE和Opera中运行正常,但在firefox和google的浏览器Chrome中都没有反应。通过跟踪得知,在firefox和Chrome中没有all这个属性。

1 var objs = document.getElementsByTagName("ul")[0].children;
2 for(var i=0;i<objs.length;i++){
3   alert(objs[i].innerHTML);
4 }

  测试发现在IE、Opera和Chrome都正常运行,但在firefox中依然不能运行。跟踪得知,firefox中依然没有children这个属性。

1 var objs = document.getElementsByTagName("ul")[0].childNodes;
2 for(var i=0;i<objs.length;i++){
3  alert(objs[i].innerHTML);
4 }

  测试发现在IE、Opera中都正常运行,但在firefox和Chrome中会得到长度为9的数组,比IE和Opera中多了5个"\n"。查资料如下:

  all 返回对象所包含的元素集合的引用。 
childNodes 获取作为指定对象直接后代的 HTML 元素和 TextNode 对象的集合。 
children 获取作为对象直接后代的 DHTML 对象的集合。

这从验证了测试结果为什么firefox和Chrome中多了5个“\n”。  

  所以如果把HTML改成如下,则四个浏览器正常运行。

1 <ul><li>this‘s one</li><li>this‘s two</li><li>this‘s three</li><li>this‘s four</li></ul>

  

  总结:如果在JS中想得到某个元素下的所有子元素,最好的方式还是使用childNodes属性。至于因为排版中间的换行符因为在firefox和chrome中都一并得到了,可以使用得到的子元素时进行判断。最终我的方案如下。有更好的方法清指教!

1 var objs = document.getElementsByTagName("ul")[0].childNodes;
2 for(var i=0;i<objs.length;i++){
3   if(objs[i].tagName != "LI") continue;
4   alert(objs[i].innerHTML);
5 }

时间: 2024-10-19 09:09:58

在Js中得到元素的子元素集合注意事项的相关文章

jQuery中兄弟元素、子元素和父元素的获取

我们这里主要总结jQuery中对某元素的兄弟元素.子元素和父元素的获取,原声的Javascript代码对这些元素的获取比较麻烦一些,而jQuery正好对这些方法进行封装,让我们更加方便的对这些元素进行获取和操作. jQuery提供的方法 上来就把jQuery提供的方法摆在这里是不是有点不好呀,不过,我们从jQuery的方法名称上就能知道这些方法是干嘛的了. parent(selector) 查找父元素,可传入selector进行过滤(下同) parents(selector) 查找所有的祖先节点

关于css中父元素与子元素之间margin-top的问题

之前在使用经常遇到下面的问题: html: 1 <div class="top"> 2 <div class="one">I'm the first!</div> 3 <div class="two">I'm the second!</div> 4 </div> css: .one{ width: 100px; height: 100px; background: red;

父元素与子元素之间的margin-top问题(css hack)

hack: 父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns=&qu

jquery选择器如何获取父级元素、同级元素、子元素

一.新建页面 1 <ul> 2 <li>list item 1</li> 3 <li>list item 2</li> 4 <li class="third-item">list item 3</li> 5 <li>list item 4</li> 6 <li>list item 5</li> 7 </ul> 8 9 <p>Hell

[ jquery 文档处理 wrapInner(htm|element|fnl) ] 此方法用于把所有匹配的元素的子元素(包括文本节点)使用指定的 HTML 元素来包裹

此方法用于把所有匹配的元素的子元素(包括文本节点)使用指定的 HTML 元素来包裹 将每一个匹配的元素的子内容(包括文本节点)用一个HTML结构包裹起来 这个函数的原理是检查提供的第一个元素(它是由所提供的HTML标记代码动态生成的),并在它的代码结构中找到最上层的祖先元素--这个祖先元素就是包装元素 html HTML标记代码字符串,用于动态生成元素并包装目标元素 element 用于包装目标元素的DOM元素 fn 生成包裹结构的一个函数 实例: <html lang='zh-cn'> &l

jquery选择器 之 获取父级元素、同级元素、子元素

一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 href_fir href_sec href_thr href_fiv $(document).ready(function(){ $("a").parent().addClass('a_par'); }); firebug查看jquery parent效果 二.获取同级元素: 1.next([expr]): 获取指定元素的下一个同级元素(注意是下一个同级元素哦) list item 1 list it

关于父元素,子元素,同级元素的DOM操作技巧

复杂,沉重的web应用在现在是常态,想jquery这样的易于使用的库,跨浏览器的兼容性,各种各样的功能,在操作HTML上非常有帮助.所以难怪很多开发者选择使用这样的库,而不是过去有很多问题原生的DOM API.虽然浏览器的差异仍然是一个问题,今天的DOM是比5年或6年前jQuery刚开始流行时更好. 在这篇文章中,我将讨论和展示一些不同的DOM的功能,可以用来操纵HTML,主要聚焦在父元素,子元素和同级节点的关系上. 在最后还是介绍到浏览器的支持兼容情况.但是有一点需要注意的是像jquery这样

当display=none时,元素和子元素高度为0的解决办法

在前端中为了某种需要,我们需要获取display=none的元素或者子元素的实际高度来进行某些处理,然而html对display=none的元素和子元素是不进行渲染的,如果我们没有规定这些元素的高度那么它们的高度都会是0,就算元素中有文字或者其它内容. 解决办法:通过jquery的show方法先展示出来,再在回调函数中获取它们的高度并操作即可,代码如下:$(".box").show(0,function(){ var h = $(".box").outerHeigh

获取可见元素的子元素的值

html代码片段: <tr>     <td class="td1">图片分类</td>     <td class="td2">         <select class="c333 sel" name="type" id="type_p"><!--js通过此select选择下面的一个li显示,另一个隐藏-->