DOM节点操作

概念

dom:docment object model 文档对象模型
DOM 都是由节点组成的
节点可以分为三大类:
元素节点 html标签
文本节点 标签中的文字(空格,换行)
属性节点 标签的属性
在这里插入图片描述

学习dom,就是学习对节点的操作
修改:修改DOM节点的内容。
遍历:遍历DOM节点下的子节点,方便下一步操作。
添加:在DOM节点下添加一个子节点。
删除:将该节点从HTML中删除。也相当于删除了它包含的所有内容以及所有子节点。

DOM可以做什么:
1.找对象(元素节点)
2.设置元素节点的属性值、
3。动态删除和创建节点。
4.事件的响应触发

获取节点方法

<body>
    <h1 id="title1">我是1级标题</h1>
    <h2 class="title2">我是2级标题</h2>
    <h3>我是3级标题</h3>
    <div class="box1 title2" id="box">我是div容器
        <p name="pp">我是p段落</p>
    </div>
</body>

1.getElementById

格式:node.getElementById(“ID”),
功能:从node节点开始,通过ID查找节点。返回对拥有指定id的第一个对象的引用

<script>
        window.onload = function() {
        	//通过id获取元素节点
            var tmp = document.getElementById("title1");
        }
    </script>

在这里插入图片描述

2.getElementsByTagName

通过标签名查找节点,返回带有指定名称的对象的伪数组(集合)要获取指定类名对象通过下标获取
格式:node.getElementsByTagName(“标签名”);

window.onload = function() {
            var tmp1 = document.getElementsByTagName("div")[0];
            console.log(tmp1);
        }

在这里插入图片描述
【注意】getElementsByTagName/getElementsByClassName 获取到的是元素节点,元素节点中没有getElementById方法
document对象中是可以使用getElementById的。

 window.onload = function() {
            var tmp1 = document.getElementsByTagName("div")[0];
            var tmp2 = tmp1.getElementsByTagName("p");
            console.log(tmp3);
        }

在这里插入图片描述

3.getElementsByClassName

通过类名去查找节点,返回带有指定类名的对象的伪数组(集合)要获取指定类名对象通过下标获取
格式:node.getElementsByClassName(“类名”);

window.onload = function() {
            var tmp3 = document.getElementsByClassName("title2")[0];
            console.log(tmp3);
        }

在这里插入图片描述

4.getElementsByName()

通过name属性值去获取节点,返回带有指定属性名的对象的伪数组(集合)要获取指定类名对象通过下标获取
最常用在 表单元素中。
低版本的IE不支持。

5.querySelector()

格式:node.querySelector(css选择器)
返回值:
如果找到选择器匹配的元素,则返回第一个元素。
如果没找到,则返回null

<script>
        window.onload = function() {
            var bBox = document.querySelector(".box");
            var bBox = document.querySelector(".name");
            console.log(bBox);

        }
    </script>

在这里插入图片描述

6.querySelectorAll()

格式:node.querySelector(css选择器)
返回值:
如果找到选择器匹配的元素,则返回全部。
如果没找到,则返回null

<script>
        window.onload = function() {
            var bBox1 = document.querySelectorAll(".box");
            console.log(bBox1);

        }
    </script>

在这里插入图片描述
nodelist 伪数组 常规的数组方法对伪数组是无效的 length 【下标】
node 表示传入的节点,获取该节点的元素节点。

操作元素节点的属性

标签上的属性分类:
1.原生属性
2.自定义属性
3.H5 自定义属性

1.原生属性

语法:元素.属性名
修改/新增:
元素.属性名 = “值”

		window.onload = function() {
            var arr = document.getElementById("box");
            arr.id = "box2";            
            console.log(arr);
        }

在这里插入图片描述

获取:
元素.属性名

		window.onload = function() {
            var arr = document.getElementById("box");
            console.log(arr);
        }

在这里插入图片描述

【注意】class属性是例外,不能直接通过属性名获取,而是用className
删除

		window.onload = function() {
            var arr = document.getElementById("box");
            arr.removeAttribute("id");
            console.log(arr);
        }

在这里插入图片描述

2.自定义属性

不能直接使用 元素. 这个语法来获取。
三个方法去操作:

获取 getAttribute("属性名");

返回值:字符串

		<body>
   			 <img src="img/1.jpg" alt="" class="desc">
		</body>
		<script>
        window.onload = function() {
            var arr1 = document.getElementsByClassName("desc")[0];
            var a = arr1.getAttribute("src");
            console.log(a);
        }
    </script>

在这里插入图片描述

设置 setAttribute("属性名","属性值");
		<body>
   			 <img src="img/1.jpg" alt="" class="desc">
		</body>
		<script>
        window.onload = function() {
            var arr1 = document.getElementsByClassName("desc")[0];
            var a = arr1.setAttribute("name", "index");
            console.log(a);
        }
    </script>

在这里插入图片描述
删除
removeAttribute(“属性名”)

		window.onload = function() {
            var arr1 = document.getElementsByClassName("desc")[0];
             arr1.className += " info"
            console.log(arr.className);
        }

在这里插入图片描述

【注意】这三个方法也可以操作原生属性

3.H5 自定义属性dataSet

每一个元素节点上都有一个属性:dataSet
里面包含了所有的H5自定义属性。
键值对结构: 例子;data-id =“idBox”
key:data-XXX xxx的内容。
value:属性值
获取:
元素.dataset.key

		window.onload = function() {
            var arr = document.getElementsByTagName("div")[0];
            console.log(arr.dataset.b);
        }

设置:
元素.dataset.key = “值”

		window.onload = function() {
            var arr = document.getElementsByTagName("div")[0];
            arr.dataset.b = "bb";
            console.log(arr);
        }

在这里插入图片描述

<body>
    <div></div>
    <script>
        var box = document.querySelector("div");
        box.dataset.index = "aa"
        console.log(box);
    </script>
</body>

在这里插入图片描述

删除
delete 元素.dataset.key

		window.onload = function() {
            var arr = document.getElementsByTagName("div")[0];
            delete arr.dataset.b;
            console.log(arr);
        }

在这里插入图片描述

操作元素的类名

1.按照原生属性的方式来操作

     获取:
         元素.className
	<body>
	    <div class="box">我是第1个div标签</div>
	</body>
	<script>
        window.onload = function() {
            var box = document.getElementsByClassName("box")[0];
            console.log(box.className);

        }
    </script>

在这里插入图片描述

     设置:

元素.className = “值”

	<body>
	    <div class="box">我是第1个div标签</div>
	</body>
	<script>
        window.onload = function() {
            var box = document.getElementsByClassName("box")[0];
             box.className = "aa"
            console.log(box);

        }
    </script>

在这里插入图片描述

追加:
元素.className += " 值";

	<body>
	    <div class="box">我是第1个div标签</div>
	</body>
	<script>
        window.onload = function() {
            var box = document.getElementsByClassName("box")[0];
            // 添加的新类名前一定要有一个空格
             box.className += " aa"
            console.log(box);

        }
    </script>

在这里插入图片描述

【注意】 追加时,值的前面要加一个空格。
删除:
1.重新设置一遍。
2.
2.1 获取classname属性值、
2.2 按照空格去分割字符串
2.3 遍历数组,将要删除的字符串删除
2.4 数组的join方法

2.H5标准给我们一个API
元素节点都有一个属性叫做:classList
里面包含了所有的class值。
获取:
元素.classList 获取class值的集合。
想要获取单个,使用下标。

	<body>
	    <div class="box">我是第1个div标签</div>
	</body>
	<script>
        window.onload = function() {
            var box = document.getElementsByClassName("box")[0];
            console.log( box.classList);
        }
    </script>

在这里插入图片描述

新增:
元素.classList.add(“新增的类名”)

	<body>
	    <div class="box">我是第1个div标签</div>
	</body>
	<script>
        window.onload = function() {
            var box = document.getElementsByClassName("box")[0];
             box.classList.add("desc");
            console.log(box);
        }
    </script>

在这里插入图片描述

删除:
元素.classList.remove(“删除的类名”)

	<body>
	    <div class="box">我是第1个div标签</div>
	</body>
	<script>
        window.onload = function() {
            var box = document.getElementsByClassName("box")[0];
             box.classList.remove("aa");
            console.log(box);
        }
    </script>

在这里插入图片描述
替换:
元素.classList.replace(“旧类名”,“新类名”) ;

	<body>
	    <div class="box">我是第1个div标签</div>
	</body>
	<script>
        window.onload = function() {
            var box = document.getElementsByClassName("box")[0];
            //第一个参数为要被替换的类名,第二个参数为新类名
            box.classList.replace("aa", "aaaa");
            console.log(box);
        }
    </script>

在这里插入图片描述

toggle() 切换
语法:元素.classList.toggle(类名)
当元素拥有这个类名时,将类名删除

	<body>
	    <div class="box">我是第1个div标签</div>
	</body>
	<script>
        window.onload = function() {
            var box = document.getElementsByClassName("box")[0];
           box.classList.toggle("aa");
            console.log(box);
        }
    </script>

在这里插入图片描述

当元素没有这个类名时,将类名添加

	<body>
	    <div class="box">我是第1个div标签</div>
	</body>
	<script>
        window.onload = function() {
            var box = document.getElementsByClassName("box")[0];
           box.classList.toggle("ccc");
            console.log(box);
        }
    </script>

在这里插入图片描述

操作元素节点中的内容

1.innerHTMl

   获取元素节点中除了本身的标签外,所有的HTML代码。
   获取:
       元素.innerHTML
	<body>
		   <div class="box index aa  bbb">我是第1个div标签</div>
	</body>
	<script>
        window.onload = function() {
            var box = document.getElementsByClassName("box")[0];
            console.log(box.innerHTML);
        }
    </script>

在这里插入图片描述

设置:
元素.innerHTMl = “新的内容”

	<body>
	   <div class="box index aa  bbb">我是第1个div标签</div>
	</body>
	<script>
        window.onload = function() {
            var box = document.getElementsByClassName("box")[0];
            box.innerHTML = "<h1>我是新内容!</h1>";
            console.log(box.innerHTML);
        }
    </script>

在这里插入图片描述
【注意】 innerHTML 会覆盖原有的内容,而且会解析其中的标签。

2.innerText
获取元素节点中的文本内容,会覆盖原有的内容,不会解析内容中的标签。
获取:
元素.innerText
设置:
元素.innerText = “新的内容”;
在这里插入图片描述

3.value
主要使用在表单元素中。
操作表单元素节点的value属性。
获取:
表单元素节点.value

		<body>
		   <input type="text" value="我是input标签!">
		</body>
		<script>
        	window.onload = function() {
           		var inp = document.querySelector("input");
            	console.log(inp.value);
        }
    </script>

设置:
表单元素节点.value = “值”

		<body>
		   <input type="text" value="我是input标签!">
		</body>
		<script>
        	window.onload = function() {
           		var inp = document.querySelector("input");
            	inp.value = "请输入";
        }
    </script>

在这里插入图片描述

操作元素节点的样式

元素节点的样式:
样式:
行内
内嵌
外链
行内样式:
原生属性的方式获取
元素.style.样式的属性名

	<style>
        .box {
            width: 200px;
            height: 200px;
            background-color: coral;
        }
    </style>
    <body>
    <div class="box ">我是第1个div标签</div>
	</body>
    <script>
        window.onload = function() {
            var box = document.getElementsByClassName("box")[0];
        }
    </script>

【注意】如果属性名是多个单词,第二个单词首字母大写,删除中划线。
该方法只能获取行内。
设置样式
语法:元素.style.样式名 = “值”;

	<style>
        .box {
            width: 200px;
            height: 200px;
            background-color: coral;
        }
    </style>
    <body>
    <div class="box ">我是第1个div标签</div>
	</body>
    <script>
        window.onload = function() {
            var box = document.getElementsByClassName("box")[0];
            box.style.backgroundColor = "red";
            box.style.width = "100px";
        }
    </script>

在这里插入图片描述

获取元素的有效样式
标准浏览器:
getComputedStyle(要获取样式的元素)
IE低版本:(IE8以下)
元素.currentStyle.样式属性名 box.currentStyle.width

属性节点

属性节点:
获取元素节点的属性节点
元素.attributes

	<body>
	    <div id=" aa" class="index bb"></div>
	</body>
	 <script>
        window.onload = function() {
            var box = document.getElementsByClassName("bb")[0];
            var item = box.attributes;
            console.log(item);

        }
    </script>

在这里插入图片描述

单个属性节点:
元素.attributes.getNamedItem(“属性名”);

	<body>
	    <div id=" aa" class="index bb"></div>
	</body>
	 <script>
        window.onload = function() {
            var box = document.getElementsByClassName("bb")[0];
            var item = box.attributes.getNamedItem("class");
            console.log(item);

        }
    </script>

在这里插入图片描述

通过节点关系获取节点

DOM节点不是孤立存在,我们可以通过节点之间的关系去获取他们。
节点的关系,是以属性的方式存在的。

获取父节点。
节点.parentNode

<body>
    <div id="box">
        <div class="index "></div>
        <p class="bbb"></p>
        <div class="aa"></div>
    </div>
</body>
<script>
        window.onload = function() {
            var item = document.querySelector(".index");
            console.log(item.parentNode);

        }
    </script>

在这里插入图片描述

获取兄弟节点
1.下一个节点
node.nextSibling
对于标准浏览器,标签,空文档,换行都属于节点。
IE低版本:指下一个元素节点。

<body>
    <div id="box">
        <div class="index "></div>
        <p class="bbb"></p>
        <div class="aa"></div>
    </div>
</body>
<script>
        window.onload = function() {
            var item = document.querySelector(".index");
            console.log(item.nextSibling);

        }
    </script>

在这里插入图片描述

2.下一个元素节点
node.nextElementSibling

<body>
    <div id="box">
        <div class="index "></div>
        <p class="bbb"></p>
        <div class="aa"></div>
    </div>
</body>
<script>
        window.onload = function() {
            var item = document.querySelector(".index");
            console.log(item.nextElementSibling);

        }
    </script>

在这里插入图片描述

兼容写法:
下一个兄弟节点 = 节点.nextElementSibling||节点.nextSibling

3.上一个节点
node.previousSibling

<body>
    <div id="box">
        <div class="index "></div>
        <p class="bbb"></p>
        <div class="aa"></div>
    </div>
</body>
<script>
        window.onload = function() {
            var item = document.querySelector(".index");
            console.log(item.previousSibling);

        }
    </script>

在这里插入图片描述

4.上一个元素节点
node.previousElementSibling

<body>
    <div id="box">
        <div class="index "></div>
        <p class="bbb"></p>
        <div class="aa"></div>
    </div>
</body>
<script>
        window.onload = function() {
            var item = document.querySelector(".index");
            console.log(item.previousElementSibling);

        }
    </script>

在这里插入图片描述

获取单个子节点
1.第一个子节点
node.firstChild

<body>
    <div id="box">
        <div class="index "></div>
        <p class="bbb"></p>
        <div class="aa"></div>
    </div>
</body>
<script>
        window.onload = function() {
            var item = document.querySelector("#id");
            console.log(item.firstChild);

        }
    </script>

在这里插入图片描述

2.获取第一个元素节点
node.firstElementChild

<body>
    <div id="box">
        <div class="index "></div>
        <p class="bbb"></p>
        <div class="aa"></div>
    </div>
</body>
<script>
        window.onload = function() {
            var item = document.querySelector("#box");
            console.log(item.firstElementChild);

        }
    </script>

在这里插入图片描述

3.获取最后一个子节点
node.lastChild

<body>
    <div id="box">
        <div class="index "></div>
        <p class="bbb"></p>
        <div class="aa"></div>
    </div>
</body>
<script>
        window.onload = function() {
            var item = document.querySelector("#id");
            console.log(item.firstElementChild);

        }
    </script>

在这里插入图片描述

4.获取最后一个元素节点
node.lastElementChild

<body>
    <div id="box">
        <div class="index "></div>
        <p class="bbb"></p>
        <div class="aa"></div>
    </div>
</body>
<script>
        window.onload = function() {
            var item = document.querySelector("#id");
            console.log(item.firstElementChild);

        }
    </script>

在这里插入图片描述

获取所有子节点
1.获取所有子节点
语法:node.childNodes
返回的是子节点的伪数组(元素节点,文本节点,注释节点)

<body>
    <div id="box">
        <div class="index "></div>
        <p class="bbb"></p>
        <div class="aa"></div>
    </div>
</body>
<script>
        window.onload = function() {
            var item = document.querySelector("#id");
            console.log(item.childNodes);

        }
    </script>

在这里插入图片描述

2.获取所有的元素子节点
语法:node.children
返回元素节点。使用最多的方法。

<body>
    <div id="box">
        <div class="index "></div>
        <p class="bbb"></p>
        <div class="aa"></div>
    </div>
</body>
<script>
        window.onload = function() {
            var item = document.querySelector("#id");
            console.log(item.children);

        }
    </script>

在这里插入图片描述

节点的属性
属性:事物的特征
nodeName: 节点名称
注释节点: #comment
文本节点: #text
元素节点: 大写的标签名
属性节点: 属性名

nodeType:节点类型
注释节点:8
文本节点:3
元素节点:1
属性节点:2

nodeValue:节点的值
注释节点:注释内容
文本节点:文本内容
元素节点:null
属性节点:属性值
创建节点
元素节点:document.createElement(“标签名”);
返回值:新的元素节点
创建完成后,需要插入到页面中才能看到

节点操作

创建节点
元素节点:document.createElement(“标签名”);
返回值:新的元素节点
创建完成后,需要插入到页面中才能看到

<body>

</body>
<script>
        window.onload = function() {
            var box = document.createElement("div");
            document.body.appendChild(box)

        }
    </script>

在这里插入图片描述

文本节点
document.createTextNode(内容);

<body>
	<div id="box"></div>
</body>
<script>
        window.onload = function() {
            var box = document.getElementById("box");
            var text = document.createTextNode("我是通过JS添加的内容");
            box.appendChild(text);

        }
    </script>

在这里插入图片描述

插入节点
node.appendChild
在父节点的最后添加一个新的子节点。
node.insertBefore(新节点,参考节点)
在父节点的参考节点前添加一个新的子节点。
如果参考节点为null,则在父节点的最后添加新的子节点

<body>
	<div id="box">
        <p class="aa"></p>
        <div class="index"></div>
    </div>
</body>
<script>
        window.onload = function() {
            var box = document.getElementById("box");
            var index = document.querySelector(".index");
            var add = document.createElement("div");
             var add2 = document.createElement("div");
            box.insertBefore(add, index);
            box.insertBefore(add2, null);

        }
    </script>

在这里插入图片描述

删除节点
父节点.removeChild(子节点);
在父节点中移除该子节点
node.remove();
在父节点中移除自身。

<body>
	<div id="box">
        <p class="aa"></p>
        <div class="index"></div>
    </div>
</body>
<script>
        window.onload = function() {
            var box = document.getElementById("box");
            var index = document.querySelector(".index");
            box.removeChild(index);

        }
    </script>

在这里插入图片描述

替换节点:
用一个节点去替换另外一个节点
父节点.replaceChild(新节点,旧节点);

<body>
	<div id="box">
        <p class="aa"></p>
        <div class="index"></div>
    </div>
</body>
<script>
        window.onload = function() {
            var box = document.getElementById("box");
            var aa = document.querySelector(".aa");
            var add = document.createElement("div");
             box.replaceChild(add, index);


        }
    </script>

在这里插入图片描述

复制节点
node.cloneNode([true]);
复制节点,克隆节点
如果参数为true,则将其所有子节点也克隆。

<body>
	<div id="box">
        <p class="aa">我是p段落</p>
        <div class="index">我是div标签</div>
    </div>
</body>
<script>
        window.onload = function() {
            var box = document.getElementById("box");
            var aa = document.querySelector(".aa");
            var add = index.cloneNode();
            var add2 = index.cloneNode(true);
            box.appendChild(add);
            box.appendChild(add2);


        }
    </script>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值