Javascript Dom元素获取和添加详解


Posted in Javascript onSeptember 24, 2019

1.Dom元素的获取

  • document.getElementById():通过id获取一个Dom元素
  • document.getElementsByClassName():通过class名字获取一个或多个Dom元素(伪数组)
  • document.getElementsByTagName():通过标签名字获取一个或多个Dom元素(伪数组)
  • document.querySelector():获取指定 CSS 选择器的一个元素
  • document.querySelectorAll():获取指定 CSS 选择器的多个元素(伪数组)

ES6选择器与其他选中器的区别:

document.getElementsByTagName()和document.getElementsByClassName()获取到的都是动态列表

document.querySelectorAll()获取到的是静态列表,Dom结构发生变化要重新获取,不然会出问题

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Test</title>
  </head>
  <style>
    *{padding: 0;margin: 0;}
  </style>
  <body>
    <ul>
      <li class="test">1</li>
      <li class="test">2</li>
      <li class="test">3</li>
      <li class="test">4</li>
    </ul>
  </body>
</html>
<script>
  var lis = document.getElementsByTagName('li')
  var liByQuery = document.querySelectorAll('li')
  console.log(lis.length) // 4
  console.log(liByQuery.length) // 4

  // 动态添加li标签
  document.querySelector('ul').innerHTML += "<li class='test'>5</li>"
  console.log(lis.length) // 5 
  console.log(liByQuery.length) // 4 
</script>

document.getElementsByTagName()和document.getElementsByClassName()获取到的是 HTMLCollection,不能使用foreach()遍历

document.querySelectorAll()获取到的NodeList,可以使用foreach()遍历

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="initial-scale=2.0">
    <title>Test</title>
  </head>
  <body>
    <ul>
      <li class="test">1</li>
      <li class="test">2</li>
      <li class="test">3</li>
      <li class="test">4</li>
    </ul>
  </body>
</html>
<script>
  var li = document.getElementsByTagName('li')
  var li2 = document.getElementsByClassName('test')
  var li3 = document.querySelectorAll('li')
  var li4 = document.querySelector('ul').children
  console.log(li) // HTMLCollection(4) [li.test, li.test, li.test, li.test]
  console.log(li2) // HTMLCollection(4) [li.test, li.test, li.test, li.test]
  console.log(li3) // NodeList(4) [li.test, li.test, li.test, li.test]
  console.log(li4) // HTMLCollection(4) [li.test, li.test, li.test, li.test]
</script>

2.Dom元素节点类型

Dom节点类型分3类:元素节点,属性节点,文本节点

每种节点都有3种属性 nodeName,nodeType,nodeValue

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Test</title>
  </head>
  <style>
    *{padding: 0;margin: 0;}
  </style>
  <body>
    <div id="box" title="我在哪">我是谁</div>
  </body>
</html>
<script>
  // 获取元素节点
  var box = document.querySelector('#box')
  // 元素节点的属性
  console.log(box.nodeName);//DIV
  console.log(box.nodeType); //1
  console.log(box.nodeValue); //一律为null
  
  // 根据属性名获取单个属性节点
  var attrTitle = box.getAttributeNode("title")
  // 获取元素属性的集合(一个伪数组对象)
  var box_attributes = box.attributes
  // 属性节点的属性
  console.log(attrTitle.nodeName);//title
  console.log(attrTitle.nodeType); //2
  console.log(attrTitle.nodeValue); //"我在哪"

  // 获取box的文本节点(没有专门的方法用来获取文本节点,但是这个div的第一个子节点就是文本节点)
  var textNode = box.childNodes[0];
  // 文本节点的属性
  console.log(textNode.nodeName);//#text
  console.log(textNode.nodeType); //3
  console.log(textNode.nodeValue); //"我是谁"
</script>

3.获取Dom元素的子元素,父元素,兄弟元素

通过children属性可以获取当前Dom元素的子元素

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Test</title>
  </head>
  <style>
    *{padding: 0;margin: 0;}
  </style>
  <body>
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
    </ul>
  </body>
</html>
<script>
  // 获取ul元素
  var ul = document.querySelector('ul')
  // 获取ul子元素
  var ul_children = ul.children
  // 遍历子元素
  for(var i=0;i<ul_children.length;i++){
    console.log(ul_children[i].innerHTML)
    // 1
    // 2
    // 3
  }  
</script>

获取当前元素的父元素

parentElement/parentNode这两个属性都可以

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Test</title>
  </head>
  <style>
    *{padding: 0;margin: 0;}
  </style>
  <body>
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
    </ul>
  </body>
</html>
<script>
  // 获取ul元素
  var ul = document.querySelector('ul')
  // 获取父元素(ul的父级就是body)
  var parent = ul.parentElement
  var parentNode = ul.parentNode

  console.log(parent.nodeName) // BODY
  console.log(parentNode.nodeName) // BODY
</script>

获取当前元素的兄弟元素

previousElementSibling属性:上一个兄弟元素

nextElementSibling属性:下一个兄弟元素

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Test</title>
  </head>
  <style>
    *{padding: 0;margin: 0;}
  </style>
  <body>
    <ul>
      <li>1</li>
      <li id="test">2</li>
      <li>3</li>
    </ul>
  </body>
</html>
<script>
  // 获取id为test的li元素
  var li = document.querySelector('#test')
  // 获取兄弟元素
  var preBrother = li.previousElementSibling
  var nextBrother = li.nextElementSibling

  console.log(preBrother.innerHTML) // 1
  console.log(nextBrother.innerHTML) // 3
</script>

注意:

children与childNodes,前者只包含元素节点,而后者为元素节点+文本节点(回车换行也算是文本节点)

而previousElementSibling与previousSibling,nextElementSibling与nextSibling也一个道理

firstChild和lastChild:firstChild等价于childNodes[0],lastChild相当于childNodes的最后一个元素

4.DOM元素的添加与移除

添加子元素

appendChild():将目标元素作为子元素添加到当前元素的最后面

insertBefore():将目标元素作为子元素添加到当前元素中,位置可以自由选择

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Test</title>
  </head>
  <style>
    *{padding: 0;margin: 0;}
  </style>
  <body>
    <ul>
      <li>1</li>
      <li id="test">2</li>
      <li>3</li>
    </ul>
  </body>
</html>
<script>
  // 获取ul元素
  var ul = document.querySelector('ul')
  // 创建li元素
  var liNode = document.createElement('li')
  liNode.innerHTML = "4"
  // 将创建的li元素添加到ul中(最后面)
  ul.appendChild(liNode)

  // 再创建li元素
  var liNode2 = document.createElement('li')
  liNode2.innerHTML = "life"

  var li_test = document.querySelector('#test')
  // 将创建的li元素添加到ul中(li_test的前面)
  ul.insertBefore(liNode2,li_test)
</script>

运行结果

<ul>
  <li>1</li>
  <li>life</li>
  <li id="test">2</li>
  <li>3</li>
  <li>4</li>
</ul>

删除子元素和替换子元素

removeChild():删除子元素

replaceChild():替换子元素

语法:parent.removeChild(child)

语法:parent.removeChild(替换的元素, 被替换的元素)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Test</title>
  </head>
  <style>
    *{padding: 0;margin: 0;}
  </style>
  <body>
    <ul>
      <li>1</li>
      <li id="test">2</li>
      <li id="replace">3</li>
    </ul>
  </body>
</html>
<script>
  // 获取ul元素
  var ul = document.querySelector('ul')

  // 获取要删除的li元素
  var li_test = document.querySelector('#test')
  // 删除子元素
  ul.removeChild(li_test)

  // 获取要替换的li元素
  var li_replace = document.querySelector('#replace')
  // 创建要替换的元素
  var newLI = document.createElement('li')
  newLI.innerHTML = "replace li tag"
  // 替换元素
  ul.replaceChild(newLI,li_replace)
</script>

运行结果:

<ul>
  <li>1</li>      
  <li>replace li tag</li>
</ul>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 学习笔记 错误处理
Jul 30 Javascript
10个实用的脚本代码工具
May 04 Javascript
jquery parent和parents的区别分析
Oct 02 Javascript
node.js中的fs.truncateSync方法使用说明
Dec 15 Javascript
iframe里使用JavaScript控制主页转向的方法
Apr 03 Javascript
浅析JS运动
Dec 28 Javascript
JS获取元素多层嵌套思路详解
May 16 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
Aug 05 Javascript
Angularjs单选改为多选的开发过程及问题解析
Feb 17 Javascript
vue-router启用history模式下的开发及非根目录部署方法
Dec 23 Javascript
原生JS 实现的input输入时表格过滤操作示例
Aug 03 Javascript
React实现轮播效果
Aug 25 Javascript
微信小程序全局变量的设置、使用、修改过程解析
Sep 24 #Javascript
layui监听select变化,以及设置radio选中的方法
Sep 24 #Javascript
layui 监听select选择 获取当前select的ID名称方法
Sep 24 #Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
Sep 24 #Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
Sep 24 #Javascript
JavaScript RegExp 对象用法详解
Sep 24 #Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
Sep 24 #Javascript
You might like
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
2013/06/24 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
JQuery 入门实例1
2009/06/25 Javascript
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
javascript开发技术大全-第3章 js数据类型
2011/07/03 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
python实现爬虫下载美女图片
2015/07/14 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
python编程实现12306的一个小爬虫实例
2017/12/27 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
python中常用的数据结构介绍
2021/01/12 Python
Parfumdreams英国:香水和化妆品
2019/05/10 全球购物
德国高尔夫商店:Par71.de
2020/11/29 全球购物
工商治理实习生的自我评价
2014/01/15 职场文书
《二泉映月》教学反思
2014/04/15 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
汽车广告策划方案
2014/05/31 职场文书
新教师个人工作总结
2015/02/06 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
升学宴祝酒词
2015/08/11 职场文书
golang特有程序结构入门教程
2021/06/02 Python