JavaScript DOM学习

本文主要探讨了JavaScript中DOM的相关操作,包括如何实例化、获取和创建节点,详细讲解了Document、Element、Text和Comment节点的属性和方法,并介绍了DOM节点的追加、插入、删除和复制等操作。重点讲解了window.onload事件以及节点操作的最佳实践。
摘要由CSDN通过智能技术生成


DOM是针对HTML和XML文档的一个API
IE中的所有DOM对象都是以COM对象的形式实现的

实例化

通过DOM获取节点

    <div id="myDiv">
    <div class="" id="div1">text</div>
    <div class="" id="div2">text</div>
    </div>
<script>
<!-- 要在html文件读取结束后再获取DOM节点 -->
    var myDiv=document.getElementById("myDiv");
    //通过Id拿到myDiv节点
    console.log(myDiv);
    var div1=document.getElementById("div1");
    console.log(div1);
</script>

在这里插入图片描述

通过DOM创建节点

<script>
    var node=document.createElement("LI");
    // 创建一个li节点
    var textNode=document.createTextNode("Hello");
    // 创建一个text节点
    node.appendChild(textNode);
    // 将text节点追加到li节点上
    document.getElementById("myDiv").appendChild(node);
    // 找到myDiv节点 然后将node节点追加myDiv的子节点
</script>

在这里插入图片描述

文档类型

Document

表示整个html文档

属性

属性描述
body直接指向body元素
head获取html头部内容
title获取文档标题
doctype$获取<!DOCTYPE>兼容性不强
URL获取完整的URL
domain获取域名
referrer获取链接到当前页面的那个页面的URL
images获取页面所有的img对象 返回值:HTMLCollection
forms获取页面所有的form对象 返回值:HTMLCollection
links获取文档中带有href属性的a元素

方法

方法作用
getElementById()通过元素id获取元素节点 调用者:document 参数:想要获取的元素id 返回值:找到的第一个元素,如果没有则返回null
 <div class="app">
        div.app
</div>
<div id="app">
       div#app1
</div>
<script>
    var idApp=document.getElementById("app");
    console.log(idApp);
</script>

在这里插入图片描述

方法作用
getElementsByClassName()通过元素类名获取元素节点 调用者:document 参数:一个字符串表示元素的类名,可以由空格隔开 返回值:HTMLCollection(包含一个或多个元素的list)可以使用数组的操作方式处理结果
 <div class="app">
        div.app
</div>
<div id="app">
       div#app1
</div>
<script>
    var classAPP=document.getElementsByClassName("app");
    console.log(classAPP);
</script>

在这里插入图片描述

方法作用
getElementsByTagName()通过元素的元素名/标签名找到对应的元素 调用者:document 参数:一个字符串表示元素的元素名 返回值:找到的所有符合条件的元素集合
<div class="app">
        div.app
</div>
<div id="app">
       div#app1
</div>
<script>
    var myDivs=document.getElementsByTagName("div");
    console.log(myDivs);
</script>

在这里插入图片描述

方法作用
getElementsByName()通过元素的name属性找到对应的元素 调用者:document 参数:一个字符串表示元素name 返回值:NodeList,包含一个或多个元素
    <div name="myDiv">123</div>
<script>
    var myNameDiv= document.getElementsByName("myDiv");
    console.log(myNameDiv);
</script>

在这里插入图片描述

Element

属性

属性描述
id元素在文档中的唯一标识符
className与元素的class特性相对应 可以重复,可以有多个,用空格分隔
title与元素相关的附加说明信息
srcimg元素具有的属性
altimg元素具有的属性
自定义属性

方法

方法作用
setAttribute();给获取到的元素设置属性 调用者:要设置属性的元素 参数:("属性名",“对应值”)返回值: 注意:要设置的值存在时,修改原来的值,不存在的话,添加值
<div class="one">
    myDiv
</div>
<script>
    var node=document.getElementsByClassName("one")[0];
    node.setAttribute("className","two");
    //node.setAttribute(“class”,"新类名");(设置类名) 
    //  node.className="two";
    //node.className="";(设置类名)
    console.log(node);
</script>

在这里插入图片描述

方法作用
getAttribute();获取到相应元素的某个属性 调用者:元素 参数:属性名 返回值:对应的属性值
<div class="one" style="color: red;">
    myDiv
</div>
<script>
    var node=document.getElementsByClassName("one")[0];
    console.log(node.getAttribute("class"));
    //node.getAttribute("class");(获取类名)
    console.log(node.getAttribute("style"));
</script>

在这里插入图片描述

方法作用
removeAttribute();移除相应元素的某个属性 参数:属性名
    <div class="one" id="one" style="color: red;">
        myDiv
    </div>
<script>
    var myDiv=document.getElementById("one");
    myDiv.removeAttribute("id");
    //移除id
    console.log(myDiv);
</script>

在这里插入图片描述

方法作用
createElement();创建一个dom节点 调用者:document 参数:要创建元素的标签名,在html中不区分大小写,在xml中区分大小写
<script>
    var node=document.createElement("LI");
    // 创建一个li节点
</script>

window.onload
window.onload() 方法用于在网页加载完毕后立刻执行的操作,即当 HTML 文档加载完毕后,立刻执行某个方法
通常用于 body元素,在页面完全载入后(包括图片、css文件等等)执行脚本代码

window.onload=function(){
    Func1();
    Func2();
    Func3();
    .....
}

兄弟、孩子节点属性

属性描述
firstElementChild某个节点的第一个孩子
lastElementChild某个节点的最后一个孩子元素节点
<div class="one" id="myDiv" style="color: red;">myDiv
    <div id="div1-1">1</div>
    <div id="div1-2">2</div>
    <div id="div1-3">3</div>
    <div id="div1-4">4</div>
</div>
<script>
    var myDiv=document.getElementById("myDiv");
    console.log(myDiv.firstElementChild);
    console.log(myDiv.lastElementChild);
</script>

在这里插入图片描述

属性描述
nextElementSibling某个节点的下一个兄弟元素节点
previousElementSibling某个节点的上一个兄弟元素节点
<div class="one" id="myDiv" style="color: red;">myDiv
    <div id="div1-1">1</div>
    <div id="div1-2">2</div>
    <div id="div1-3">3</div>
    <div id="div1-4">4</div>
</div>
<script>
 	console.log(myDiv.firstElementChild.nextElementSibling);//下一个兄弟节点
    console.log(myDiv.lastElementChild.previousElementSibling);//上一个兄弟节点
</script>

在这里插入图片描述

属性描述
childElementCount返回该节点子元素的数量
<div class="one" id="myDiv" style="color: red;">myDiv
    <div id="div1-1">1</div>
    <div id="div1-2">2</div>
    <div id="div1-3">3</div>
    <div id="div1-4">4</div>
</div>
<script>
    var myDiv=document.getElementById("myDiv");
    console.log(myDiv.childElementCount);
</script>

在这里插入图片描述

属性描述
innerHTML获取或设置指定元素标签内的 html内容
<div class="one" id="myDiv" style="color: red;">myDiv
    <div id="div1-1">1</div>
    <div id="div1-2">2</div>
    <div id="div1-3">3</div>
    <div id="div1-4">4</div>
</div>
<script>
    var myDiv=document.getElementById("myDiv");
    console.log(myDiv.innerHTML); 
</script>

在这里插入图片描述

属性描述
innerText获取或设置指定元素标签内的文本值
<div class="one" id="myDiv" style="color: red;">myDiv
    <div id="div1-1">1</div>
    <div id="div1-2">2</div>
    <div id="div1-3">3</div>
    <div id="div1-4">4</div>
</div>
<script>
    var myDiv=document.getElementById("myDiv");
    console.log(myDiv.innerText); 
</script>

在这里插入图片描述

属性描述
textContent返回该元素内部的text
<div class="one" id="myDiv" style="color: red;">myDiv
    <div id="div1-1">1</div>
    <div id="div1-2">2</div>
    <div id="div1-3">3</div>
    <div id="div1-4">4</div>
</div>
<script>
    console.log(myDiv.textContent);
</script>

在这里插入图片描述

Text

属性

属性描述
length文本长度
  <div>hello,world</div>
<script>
   var div=document.getElementsByTagName("div")[0];
    console.log(div.innerText.length);
</script>

在这里插入图片描述

方法

方法描述
appendData给文本节点追加文本 调用者:文本节点 参数:要追加的文本内容
  <div>hello,world</div>
<script>
    var textNode=document.createTextNode("中国");
    textNode.appendData("你好");
    console.log(textNode);
</script>

在这里插入图片描述

方法描述
appendChild向节点添加最后一个子节点
  <div>hello,world</div>
<script>
  var div=document.getElementsByTagName("div")[0];
    var textNode=document.createTextNode("中国");
    div.appendChild(textNode);
</script>

在这里插入图片描述

方法描述
deleteData删除文本 调用者:文本节点 参数:(开始位置,要删除的数量)
<script>
    var textNode=document.createTextNode("helloworld");
    textNode.deleteData(0,2);
    console.log(textNode);
</script>

在这里插入图片描述

方法描述
insertData插入文本 参数:(开始位置,要插入的数据)
<script>
  var textNode = document.createTextNode("hello,");
    textNode.insertData(6, "Tom");
    console.log(textNode);
</script>

在这里插入图片描述

方法描述
replaceData替换文本 调用者:参数:(开始的位置,要替换文本的长度,替换的文本)
<script>
    var textNode = document.createTextNode("你好世界");
    textNode.replaceData(0, 2, "*"); 
    console.log(textNode);
</script>

在这里插入图片描述

方法描述
splitText将两个文本节点分为两个 参数:分割点的位置,返回值:分割好的后面的文本节点
<script>
  var textNode=document.createTextNode("helloworld");
  console.log(textNode.splitText(5));
</script>

在这里插入图片描述

方法描述
substringData提取文档节点中的字符串 参数:(开始的位置,要提取文本的个数) 返回值:提取出来的字符串 注意:不改变原文本对象
<script>
   var textNode=document.createTextNode("helloworld");
   console.log( textNode.substringData(0,5));//hello
   console.log(textNode);//原对象未改变
</script>

在这里插入图片描述

方法描述
createTextNode创建一个文本节点 调用者:document 参数:文本内容 返回值:textNode
<script>
   var textNode=document.createTextNode("杰瑞");
   console.log(textNode);//"杰瑞"
</script>

Comment

注释

方法

<script>
    var cNode = document.createComment("这是一个注释");
    console.log(cNode);
</script>

在这里插入图片描述

DOM节点操作

    <div>123</div>
<script>
    //创建一个div节点
    var myDiv = document.createElement('div');
    //给节点添加文本内容
    myDiv.innerText = "这是新创建的div";
    // 找到页面上的一个节点
    var rootDiv=document.getElementsByTagName("div")[0];
    // 将myDiv追加到rootDiv上
    rootDiv.appendChild(myDiv);
</script>

在这里插入图片描述

节点追加

方法描述
appendchild()将节点作为子节点追加到调用它的节点的后面 调用者:父节点 参数:要添加的新节点
<script>
    var myDiv=document.createElement('div');
    myDiv.innerText="第五个节点";
    var rootDiv=document.getElementsByClassName('parent')[0];
    rootDiv.appendChild(myDiv);
</script>

在这里插入图片描述

注意:任何dom节点不能同时出现在文档的多个位置,如果追加的节点是原本存在的,那只会改变节点位置

<script>
    var rootDiv=document.getElementsByClassName('parent')[0];
    var firstDiv=document.getElementsByClassName("child")[0];
    rootDiv.appendChild(firstDiv);
</script>

在这里插入图片描述

节点插入

方法描述
insertBefore()将新的节点插入到之前某一个节点的前面 调用者:父节点 参数:(要插入的新节点,旧的节点)
   <div class="parent">
        <div class="child">1</div>
        <div class="child">2</div>
        <div class="child">3</div>
        <div class="child">4</div>
    </div>
<script>
	// 将x插入在child3的前面
    var myDiv=document.createElement('div');
    myDiv.innerText="x";
    var rootDiv=document.getElementsByClassName('parent')[0];
    var childNode=document.getElementsByClassName('child')[2];
    rootDiv.insertBefore(myDiv,childNode);
</script>

在这里插入图片描述

节点删除

方法描述
removeChild将某个子节点删除 调用者:父节点 参数:要删除的子节点
   <div class="parent">
        <div class="child">1</div>
        <div class="child">2</div>
        <div class="child">3</div>
        <div class="child">4</div>
        <div class="child">5</div>
    </div>
<script>
    var rootDiv=document.getElementsByClassName('parent')[0];
    var childNode=document.getElementsByClassName('child')[2];
    rootDiv.removeChild(childNode);
</script>

在这里插入图片描述

节点复制

方法描述
cloneNode()复制节点 调用者:要复制的节点自身 参数:一个可选参数Boolean(默认为false,浅克隆只复制标签;如果为true,深克隆复制标签和内容)
    <div class="parent">
        <div class="child">1</div>
        <div class="child">2</div>
        <div class="child">3</div>
    </div>
<script>
       var rootDiv=document.getElementsByClassName('parent')[0];
        var childNode=document.getElementsByClassName('child')[0];
        var cloneChildNode=childNode.cloneNode(true);
        // 加上true为深克隆
        rootDiv.appendChild(cloneChildNode);
</script>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值