大家好,我是梅巴哥er
。实际项目中,最多的应用就是对DOM树的操作,所以本篇就从实用角度,总结一下原生JS下的DOM的增删改查。
document.createElement('div');
div.cloneNode(blooean);
这里的blooean是布尔值,如果是true,就克隆div元素和它里面的所有子元素以及css属性。
如果是false,只复制div元素本身,不包含它的子元素。
注意,cloneNode不复制元素的js事件。
//把div元素添加div1元素的父元素的末尾
div1.parentNode.appendChild(div);
//把div元素添加到div1元素的前面,div2元素的里面
div2.insertBefore(div, div1);
div.parent.replaceChild(div1, div2);
div.removeChild(div1);
div.remove();
div.innerHTML = '';
可以直接删除div元素里的所有节点,把div元素清空
hello world
div.innerHTML = 'hello world';
还有innerTEXT的方法,但是其实实用性并不强,所以不做介绍。
本篇只从实用性角度做介绍,不做无用扩展。
div.className = 'opacity1';
document.getElementById('box');//获取id为box的元素
document.getElementsByTagName('div')[0];//注意,这个方法获取到的是所有div元素,通过[]获取具体的某个div元素
document.getElementsByClassName('box')[0];//获取所有类名为.box的元素,也是一个数组形式
更实用 的方法是document.querySelector();
一般可以这样写:
var $ = document.querySelector.bind(document);
$('div');//获取标签名为div的第一个元素
$('.box');//获取类名为box的第一个元素
$('#box');//获取id为box的元素
如果要获取所有的同类元素,就要用到这种方法:
var $$ = document.querySelectorAll.bind(document);
$$('div');//获取所有div元素,结果是一个数组
$$('.box');//获取所有类名为box的元素,结果也是一个数组
$('div').innerHTML; //获取div元素的内容
$('input').value;//获取input的value值
var html = document.documentElement;
var body = document.body;
$('a').getAttribute('href');//获取a标签的href属性
$('a').setAttribute('href', 'www.baidu.com');
//改变单一属性的值
div.style.color = 'pink';
div.style.backgroundColor = 'purple';
这里注意一点,如果div原有'display: flex;',然后再这样设置
div.style.display = 'block';
就会把原有设置的felx布局给取消掉。
所以这一句用的时候注意点。
如果实在需要让元素消失或显示,可以用别的方法:
div.className = 'box opacity0';
给opacity0在css里添加属性,如
.opacity {
display: none;
}
//改变并覆盖之前的所有css属性和值
div.style.cssText = 'color: pink; background-color: purple;';
如果之前div还有其他css属性,会被覆盖或取消,这条慎用。
这里比较特殊的是,
直接获取是无法获取到的,比如
div.style.display 是获取不到display属性的。
可以通过如下方式获取:
window.getComputedStyle(document.querySelector('div'),null).getPropertyValue('display');
以上就是常用的dom操作。目前市面上常用的还是js和jq对dom操作,如果学懂原生js的操作,再用其他技术,将会方便很多。如有需要补充,可以评论指出。