javascript DOM 操作总结

本文详细介绍了如何使用JavaScript进行DOM操作,包括获取节点、节点操作、属性操作及文本操作等。通过实例演示了各种方法的应用场景。

写在前面,这是我本人,学习的一个总结,供自己翻阅查看;

html结构如下,一下所有例子均以此为基础
<div id="root">123456789
    <div class="container">2-1
        <a href="aaa" name="myInput">3-1</a>
        <ul class="ul">
            3-2
            <li class="li1">4-1</li>
            <li class="li2">4-2</li>
        </ul>
    </div>
    <div id="container2">2-2</div>
    <p class="p">2-3</p>
</div>

let Root = document.getElementById(‘root’);
let Container2= document.getElementById(‘container2’);


第一:获取节点:
1,firstChild:获取父元素下的首个子节点:
用法:parent.firstChild
例如:Root .firstChild;//返回:1-1 。
2,lastChild:获取父元素下的最后一个子节点:
用法:parent.lastChild
例如:Root .lastChild;//返回:#text 空格节点。
注意:之所以返回#text是由于空格造成的(一下所有事例同理),如果把最后一个</div>,和<p>标签放在一行,则返回:<p class="p">2-3</p></div>

3,childNodes:获取父元素下子节点列表:
用法:parent.childNodes
例如:Root .childNodes;//返回:[text, div.container, text, div.container2, text, p.p, text]。

4,previousSibling:已知节点上一个节点:
用法:兄弟节点.previousSibling
例如:Container2 .previousSibling;//返回:#text空格节点。
注意:如果改为<div class="container2">2-2</div> 通过document.getElementsByClassName 获取节点,能获取到(返回的是节点数组),但是要是在使用Container2 .previousSibling 返回的是:undefined;如果document.getElementsByClassName()[0],再使用那方法就能获取到想要的而不是undefined。

5,nextSibling:已知节点下一个节点:
用法:兄弟节点.nextSibling
例如:Container2 .nextSibling;//返回:#text空格节点。
注意点同previousSibling

6,parentNode:已知节点父节点:
用法:已知节点.parentNode
例如:Container2 .parentNode;//返回:<div id="root">...</div>
注意点同previousSibling


第二:节点操作
一:创建节点:
1,createElement(‘元素标签’) ,功能:创建元素标签
例如:

let RootChild = document.createElement('div');
RootChild.innerHTML = 'createElement方法创建的';
Root.appendChild(RootChild)

2,createAttribute(‘元素属性’),功能:创建元素属性
接上面的例子继续:为新建的div标签 添加个class,名字为:className

let attr = document.createAttribute('class');//创建各个属性
attr.value = 'className';//属性名
RootChild.setAttributeNode(attr);//用setAttributeNode方法添加

3,createTextNode(‘文本内容’),功能:创建文本节点
let RootChildText = document.createTextNode(‘我是新的文本节点’);
二:插入节点:
1,已知元素.appendChild(元素标签),插入到子元素列表的末尾;
2,已知元素.insertBefore(元素标签),插入到已知子元素列表的前面;

let Container = Root.getElementsByClassName('container')[0];
let RootChild = document.createElement('div');
RootChild.innerHTML = 'createElement方法创建的';
Root.insertBefore(RootChild,Container)//插入在Container前面

三:替换节点
1,node.replaceChild(要插入的新元素,要被替换的老元素)
实现子节点的替换。返回新插入的节点

let Root = document.getElementById('root');
let RootChild = document.createElement('div');
let RootChildText = document.createTextNode('我是新的文本节点');
let P = Root.getElementsByClassName('p')[0];
Root.replaceChild(Root.innerText,P)

四:克隆节点:
1,要被克隆的节点 . cloneNode(true/false);其中,true 表示 复制当前节点及其所有子节点;false 表示,只复制当前节点

let UL = Root.getElementsByClassName('ul')[0];
console.log(UL.cloneNode(false));//返回:<ul class="ul"></ul>
console.log(UL.cloneNode(true));
//返回:<ul class="ul">3-2<li class="li1">4-1</li><li class="li2">4-2</li></ul>

五:删除节点:
1,node.removeChild(要删除的子节点)

let Root = document.getElementById('root');
let P = Root.getElementsByClassName('p')[0];
Root.removeChild(P)//删除p标签

第三:属性操作:
1,node.getAtrribute(属性名),获取元素节点指定属性名的值;

let Container = Root.getElementsByClassName('container')[0];   Container.childNodes[1].getAttribute('href')//返回:aaa

2,node.setAttribute(属性名,属性值),获取或改变元素节点的属性

let Container = Root.getElementsByClassName('container')[0];   Container.childNodes[1].setAttribute('href','bbb')//返回:bbb(这是改变)
----------------------------------------
Container.childNodes[1].setAttribute('type','ccc')//返回:ccc(这是设置添加)

3,node.removeAtrribute(属性名),删除元素节点指定属性;

Container.childNodes[1].removeAtrribute('href')// 删除属性

四:文本操作
1,insertData(offset,string);从offset指定的位置插入string
2,appendData(string);將string插入到文本节点的末尾处
3,deleteData(offset,count);从offset起删除count个字符
4,replaceData(offset,count,string);从offset将count个字符用string代替
以下是使用例子:

let Root = document.getElementById('root');
Root.childNodes[0].insertData('2','string')//返回:12string3456789
Root.childNodes[0].appendData('string')//123456789string
Root.childNodes[0].deleteData('1','1')//13456789
Root.childNodes[0].replaceData('2','2','string')//12string56789
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值