JavaScript获取子元素

JavaScript011

JavaScript获取子元素,第1张

这是因为getElementById再结合children属性获取的是DOM元素,而querySelectorAll获取的则是NodeList对象元素。前者会随页面DOM结构的变化而变化,比如删除了box中的一个div,这个div就会从children中被“真实地”删掉,children.length的计数也会减1。而后者如果删除其中的某个子元素,被删的元素并不会消失,而是变成一个空对象,children1.length的计数也不会改变,这样的话 for(var i=0i<children1.length) 这个循环由于i的值不变(总是等于0),而children1.length也不会减少(总是4),这样就变成死循环了(同时也意味着把一个已删除的元素不断重复删除)。

改成这样就没问题了:

for(var i=0i<children1.lengthi++){

  box.removeChild(children1[i])

}

两种方式:

第一种纯js,使用递归:

<script>

/*

*第一个参数为页面元素对象或者数组

*第二个参数为回调函数【回调函数默认传递一个函数,即当前对象】

*/

function Each(obj,fun){

if('function'!==typeof(fun) || !obj){

return false

}

if('undefined'!==typeof(obj.length)){

for(var i=0i<obj.lengthi++){

var o=obj[i]var r=fun(o)||true

if(r===true){

r=Each(o.children,fun)

if(!r) return false

}

}

}else{

var r=fun(obj)||true

if(r===true){

r=Each(obj.children,fun)

if(!r) return false

}

}

}

</script>

用法:

//

Each(document.getElementsByTagName("body"),function(obj){

if(obj.nodeName==="UL")//obj为当前遍历到的对象

return false//如果返回false就会停止遍历

alert(obj.nodeName)

})

第二种方法,使用jquery:

$("body *").each(function(i, obj){

alert( "Item #" + i + ": " + obj )

})

1、新建一个html文件,命名为test.html,用于讲解JS如何获取指定DIV下的子元素LI的值。

2、在test.html文件内,在div标签内,使用ul、li标签创建两个项目列表,li元素的值分别为项目一、项目二。

3、在test.html文件内,设置div标签的id为mydiv,主要用于下面通过该id获得mydiv对象。

4、在test.html文件内,使用button标签创建一个按钮,按钮名称为“获取LI的值”。

5、在test.html文件中,给button按钮绑定onclick点击事件,当按钮被点击时,执行getli

6、通过获得li对象,使用each()方法遍历每一个li对象,通过text()方法获得li的值,使用push()方法将获得li值存进数组中。最后,使用alert()方法将所有li值输出。

7、在浏览器打开test.html文件,点击按钮,查看结果。