浏览器网页就是一个Dom 树形结构,要改变HTML的结构,就需要通过JavaScript来操作DOM。
- 更新:更新Dom节点的内容,相当于更新了该DOM节点表示的HTML的内容;
- 遍历dom节点:遍历该DOM节点下的子节点,以便进行进一步操作;
- 删除:将该节点从HTML中删除,相当于删掉了该DOM节点的内容以及它包含的所有子节点;
- 添加:在该DOM节点下新增一个子节点,相当于动态增加了一个HTML节点;
要操作一个Dom节点,就必须要先获得这个Dom节点:
1、获得节点
- 最常用的方法是
document.getElementById()
和document.getElementsByTagName()
,以及CSS选择器document.getElementsByClassName()
。 - 由于ID在HTML文档中是唯一的,所以
document.getElementById()
可以直接定位唯一的一个DOM节点。document.getElementsByTagName()
和document.getElementsByClassName()
总是返回一组DOM节点。要精确地选择DOM,可以先定位父节点,再从父节点开始选择,以缩小范围。
//对应 css 选择器
<div id ="father">
<h1></h1>
<p id="p1">p1</p>
<p class="p2">p2</p>
<script>
var h1 = document.getElementsByTagName('h1');
var p1 = document.getElementById('p1');
var p2 = document.getElementsByClassName('p2');
var father = document.getElementById('father');
var childrens = father.children[index]; //获取父节点下的所有子节点
father.firstChild //获取第一个节点
father.lastChild //获取第二个节点
</script>
这是原生代码,之后我们尽量都是用jQuery() ;
2、更新节点
<div id="id1">
</div>
<script>
var id1 = document.getElementById('id1');
</script>
操作文本
id1.innerText='456'
修改文本的值id1.innerHTML='<strong>123</strong>'
可以解析HTML文本标签
操作css
id1.style.color = 'yellow'; // 属性使用 字符串 包裹
id1.style.fontSize='20px'; // - 转 驼峰命名问题
id1.style.padding = '2em'
3、删除节点
删除节点的步骤: 先获取父节点,在通过父节点删除自己
<div id="father">
<h1>标题一</h1>
<p id="p1">p1</p>
<p class="p2">p2</p>
</div>
<script>
var self = document.getElementById('p1');
var father = p1.parentElement;
father.removeChild(self)
// 删除是一个动态的过程;
father.removeChild(father.children[0])
father.removeChild(father.children[1])
father.removeChild(father.children[2])
</script>
注意: 删除多个节点的时候,children 是在时刻变化的,删除节点的时候一定要注意!
4、插入节点
我们获得了某个Dom节点,假设这个dom节点是空的,我们通过 innerHTML 就可以增加一个元素了,但是这个DOM 节点已经存在元素了,我们就不能这么做了!会产生覆盖
4.1、追加
<p id="js">JavaScript</p>
<div id="list">
<p id="se">JavaSE</p>
<p id="ee">JavaEE</p>
<p id="me">JavaME</p>
</div>
<script>
var js = document.getElementById('js');
var list = document.getElementById('list');
list.appendChild(js);// 追加到后面
</script>
效果:
4.2、创建一个新的标签,实现插入
<script>
var js = document.getElementById('js'); //已经存在的节点
var list = document.getElementById('list');
//通过JS 创建一个新的节点
var newP = document.createElement('p');// 创建一个p标签
newP.id = 'newP';
newP.innerText = 'Hello,Kuangshen';
// 创建一个标签节点
var myScript = document.createElement('script');
myScript.setAttribute('type','text/javascript');
// 可以创建一个Style标签
var myStyle= document.createElement('style'); //创建了一个空style标签
myStyle.setAttribute('type','text/css');
myStyle.innerHTML = 'body{background-color: chartreuse;}'; //设置标签内容
document.getElementsByTagName('head')[0].appendChild(mySyle)
</script>
4.3、插入前面insertBefore
var ee = document.getElementById('ee');
var js = document.getElementById('js');
var list = document.getElementById('list');
// 要包含的节点.insertBefore(newNode,targetNode)
list.insertBefore(js,ee);