js中的children实时获取子元素

news/2024/7/19 13:29:05 标签: js, children


先看下面一个小例子的结果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        ul,li{list-style:none;}
    </style>
</head>
<body>
<div id="wrap">
    <ul id="list"></ul>
</div>
<script>
    var oList = document.querySelector('#list');
    var lis1 = oList.querySelectorAll('li');
    var lis2 = oList.children;
    console.log(lis1.length);//0
    console.log(lis2.length);//0
    function createLi(){
        for(var i=0; i<10; i++){
            var li = document.createElement('li');
            li.innerHTML = i;
            oList.appendChild(li);
        }
    }
    createLi();
    console.log(lis1.length);//0
    console.log(lis2.length);//10
</script>
</body>
</html>

从上面的结果我们发现,我们发现同样是一开始就获取了ul的子列表,但是通过.querySelectorAll获取的子列表,在创建列表前和创建列表后,长度都为0,而通过.children方法获取的字列表,在列表创建前,长度为0,而创建之后,长度为10,为什么呢?

使用.children获取的是元素对象是一个实时更新的列表 可以看做一个数组对象 而使用querySelectorAll获取的是NodeList 与其他方式获取的NodeList不同 它不是节点集合 而是元素集合 并且是静态的 不会实时更新 相当于克隆了一个新数组

所以,我们在使用的时候要注意了哦,如果想要实时获取列表的变化,可以使用.children,反之,则使用.querySelectorAll(当然也包括getElementsByClassName和getElementsByTagNama)

childNodes也和children一样是实时获取元素的字列表(但两者还是有区别的,这里不再详细叙说,关于两者的区别网上有很多啦)



http://www.niftyadmin.cn/n/951858.html

相关文章

移动端相册集实例(包括滑屏,自定义滚动条,上拉加载,大图预览)

大致功能描述&#xff1a; 1、滑屏&#xff0c;添加自定义滚动条 2、上拉加载 3、大图预览 图片预览&#xff08;左边是为加载中的相册集&#xff0c;中间一个是加载完成的相册&#xff0c;一个是当我们拉到底部的时候会有加载更多的提示&#xff0c;右侧是大图预览的图片&…

echarts折线图堆叠怎么设置_【统计图】Echarts实现多条折线图渐变堆叠效果

initSgLineChart() {// 基于DOM&#xff0c;初始化echarts实例(注意&#xff01;Vue的DOM日怪的很&#xff0c;一般要腾个1秒才加载完)this.lineChart this.$echarts.init(document.getElementById("sg-line-chart"));οnresize()>{this.lineChart.resize();//当…

zipkin 禁止_Spring Cloud - Zipkin

服务追踪 Spring Cloud Sleuth调用接口耗时非常严重&#xff0c;通过链路追踪得到链路花费的时间导入依赖org.springframework.cloudspring-cloud-starter-zipkin查看链路第一个值&#xff1a;服务名第二个:tranceId第三个&#xff1a;spanId&#xff0c;一个基本单元&#xff…

Javascript设计模式详解

在掘金上随便翻着看&#xff0c;看到了JavaScript设计模式详解&#xff0c;涂根华写&#xff0c;真的很详细&#xff0c;看来接下来有的学了&#xff0c;分享出来&#xff0c;希望更多的正在学前端的你可以看到喽。

mysql 模式名表名不支持_库名表名大小写问题与sqlserver兼容的启动配置方法

库名表名大小写问题与sqlserver兼容的启动配置方法更新时间&#xff1a;2010年12月17日 21:38:15 作者&#xff1a;库名表名大小写问题与sqlserver兼容的启动配置方法&#xff0c;需要的朋友可以参考下。将全局变量 lower_case_table_names 设置为1实验&#xff1a;1.lower_c…

mysql悲观锁关键字_MySQL中的悲观锁与乐观锁

在关系型数据库中&#xff0c;悲观锁与乐观锁是解决资源并发场景的解决方案&#xff0c;接下来将详细讲解&#x1f50e;一下这两个并发解决方案的实际使用及优缺点。首先定义一下数据库&#xff0c;做一个最简单的库存表&#xff0c;如下设计&#xff1a;CREATE TABLE order_st…

学习vue的相关文档

看到了一些关于vue比较好的文章&#xff0c;怕不记下来&#xff0c;以后就忘了&#xff0c;所以整理出来&#xff0c;方便自己记&#xff0c;同时也希望能帮到看到的你 Vue作者尤雨溪&#xff1a;vue2.0&#xff0c;渐进式前端解决方案 vue2.1.7源码学习 vue技术内幕 当然vue官…

mysql 1524_MySQL失败:mysql“错误1524(HY000):未加载插件'auth_socket'” - Ubuntu问答

问题描述我的本地环境是&#xff1a;新鲜的Ubuntu 16.04使用PHP 7安装了MySQL 5.7sudo apt-get install mysql-common mysql-server当我尝试通过MySQL登录MySQL时&#xff1a;mysql -u root -p我遇到了3个步骤的周期性问题。1)首先是一些套接字问题ERROR 2002 (HY000): Cant co…