DOM操作

作者: consolelog | 来源:发表于2020-11-12 21:03 被阅读0次

DOM(Document Object Model,文档对象模型),DOM定义了访问和操作HTML文档的标准方法。DOM 以树结构表达 HTML 文档。


Document树

获取标签(元素)

  1. document.getElementById("元素的ID名") 通过ID名字来获取元素(如果ID名重复了,只能获取到第一个)。如果页面没有该元素,返回null。
  2. document.getElementsByClassName("类名") 通过类名来获取元素。此方法将获取到同一类名的一个集合(HTMLCollection对象),可以通过下标访问(从0开始),length代表长度。即使页面只有一个元素或者没有元素,也会返回这个对象。
  3. document.getElementsByTagName("标签名") 通过标签名获取元素,使用方法和第二种相似
  4. document.getElementsByName("nameValue") 通过元素name获取元素,通常用于获取表单元素具有相同name的标签
  5. document.querySelector("CSS选择符") 通过CSS选择符来获取元素,返回匹配到的第一个元素
    document.querySelector("CSS选择符") 通过CSS选择符来获取元素,返回匹配到元素集合
  6. document.documentElement 获取HTML标签
    document.body 获取body标签
var ID = document.getElementById("ID");
var className = document.getElementsByClassName("class")[0];
var tagName = document.getElementsByTagName("div")[0];
var nameName = document.getElementsByName("input")[0];
var div1 = document.querySelector(".class");
var div2 = document.querySelectorAll("#ID");
var html = document.documentElement;
var body = document.body;

以上方法均可再页面中获取标签,document表示在全局下获取,在使用时也可以通过其他的节点来获取。其中document.getElementsByTagNamedocument.getElementsByTagName属于动态获取,即使页面上的内容是通过JavaScript后面动态添加的,也能获取到,而其他的方法是获取不到的。

获取节点

  • 获取子节点
  1. 父节点.children 返回保存子元素的集合,是一个HTMLcollection对象
<div>
    <p></p>
    <p></p>
    <p></p>
</div>

<script type="text/javascript">
    var div = document.querySelector("div");
    console.log(div.children);  //IE8以下会返回文本节点
</script>
  1. 父节点.childNodes 返回一个NodeList对象,NodeList是一种类数组对象,可以通过位置来访问这些节点。
<div>
    <p></p>
    <p></p>
    <p></p>
</div>

<script type="text/javascript">
    var div = document.querySelector("div");
    console.log(div.childNodes);  //IE9之前不会返回文本节点
</script>
  • 获取父节点
  1. 元素.parentNode 获取文档树中的父节点
  2. 元素.offsetParent 获取当前元素最近的有定位的父节点
<div class="parent">
    <div class="son"></div>
</div>

<script type="text/javascript">
    var son = document.querySelector(".son");
    console.log(son.parentNode);
    console.log(son.offsetParent);
</script>
  • 获取其他节点
  1. 元素.firstElementChild//(IE)元素.firstChild 获取元素的首个子节点
  2. 元素.nextSibling//(IE)元素.nextElementSibling 获取下一个兄弟节点
  3. 元素.previousSibling//(IE)元素.previousElementSibling获取上一个兄弟节点
<div class="parent">
    <div class="son1"></div>
    <div class="son2"></div>
    <div class="son3"></div>
</div>

<script type="text/javascript">
    var parent = document.querySelector(".parent");
    var son2 = document.getElementsByClassName("son2")[0];
    console.log(parent.firstElementChild);
    console.log(son2.nextElementSibling);
    console.log(son2.previousElementSibling);
</script>

  • 获取节点信息
  1. 节点.nodeName获取标签节点标签名字
  2. 节点.nodeValue获取文本节点内容
  3. 节点.nodeType获取文本类型(标签-1,属性-2,文本-3)
<div class="parent">hello world</div>

<script type="text/javascript">
    var parent = document.querySelector(".parent");
    console.log(parent.nodeName);
    console.log(parent.childNodes[0].nodeValue);
    console.log(parent.nodeType);
</script>

操作节点

  • 创建节点
  1. document.createElement("标签名") 创建一个标签对象
  2. document.createTextNode("文本") 创建一个文本对象
  • 添加节点
  1. 父元素.appendChild(节点对象) 向父元素末尾添加一个节点
  2. 父元素.insertBefore(子对象,参考节点)向参考节点前插入一个子节点
<div class="demo">
    <p class="p1">p1</p>
    <p class="p2">p2</p>
</div>

<script type="text/javascript">
    var demo = document.getElementsByClassName("demo")[0];
    var p2 = document.getElementsByClassName("p2")[0];
    
    //创建节点并添加文本
    var p3 = document.createElement("p");
    var text = document.createTextNode("text");
    p3.appendChild(text);
    
    //在p2之前插入p3
    demo.insertBefore(p3, p2);
    console.log(demo);
</script>
  • 删除节点
    父元素.removeChild(需要删除的节点)
<div class="demo">
    <p class="p1">p1</p>
    <p class="p2">p2</p>
</div>

<script type="text/javascript">
    var demo = document.getElementsByClassName("demo")[0];
    var p2 = document.getElementsByClassName("p2")[0];

    demo.removeChild(p2);
    console.log(demo);
</script>
  • 替换节点
    父元素.replaceChild(新节点,需要替换的节点)
<div class="demo">
    <p class="p1">p1</p>
    <p class="p2">p2</p>
</div>

<script type="text/javascript">
    var demo = document.getElementsByClassName("demo")[0];
    var p2 = document.getElementsByClassName("p2")[0];

    var p3 = document.createElement('p');
    p3.innerText = "p3";

    demo.replaceChild(p3, p2);
    console.log(demo);
</script>
  • 复制节点
    被复制节点.cloneNode(Boolean)复制节点并返回,参数代表是否复制节点内容
<div class="demo">div1</div>

<script type="text/javascript">
    var demo = document.getElementsByClassName("demo")[0];
    
    var copy = demo.cloneNode(true);
    console.log(copy);
</script>

相关文章

网友评论

    本文标题:DOM操作

    本文链接:https://www.haomeiwen.com/subject/ythtbktx.html