操作元素样式
ele.style
访问或设置行内样式
window.getComputedStyle()
//获取非行内样式
//标准浏览器
// alert(getComputedStyle(o_div,1).width);
//IE浏览器
// alert(o_div.currentStyle.width);
//兼容 对象 属性
function getStyle(obj,attr){
return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj,true)[attr];
// return window(因为预解析里面没有这个玩意,需要声明一下).getComputedStyle ? getComputedStyle(obj,1)[attr] : obj.currentStyle[attr];
}
操作元素类名
ele.className
ele.classList
ele.classList : 获取元素的全部类名
ele.classList.lentgh: 获取到元素类名的数量
ele.classList.add(): 向元素添加一个或多个类名
ele.classList.remove() : 可以删除元素的一个或多个类名
ele.classList.item(index) : 可以获取到元素类名索引为index的类名
ele.classList.toggle() : 可以为元素切换类名(判断如果存在,就删除,如果不存在,就加入)
ele.classList.contains(x) : 查看元素是否存在类名为"x"的类
操作元素属性
原生属性操作
元素.属性
元素['属性']
元素.getAttribute('属性名')
元素.setAttribute('属性名','属性值')
元素.removeAttribute('属性名')
自定义属性操作
getAttribute
setAttribute(key,value)
removeAttribute(key)
元素.getAttribute('属性名') : 获取属性
元素.setAttribute('属性名','属性值') : 设置属性
元素.removeAttribute('属性名') : 删除属性
H5自定义属性的操作 ( data-* )
ele.dataset : 读写自定义属性
<body>
<div id="box" data-my-id="me"></div>
<script>
var o_div = document.getElementById('box');
console.log(o_div.dataset.myId); //'me'
</script>
</body>
操作元素内容
innerHTML : 设置或获取当前节点内容的内容(超文本)(标签)(可以解析超文本的含义)
innerText : 设置或获取当前节点内部的内容(纯文本)(不能解析超文本)
value : 设置或获取表单中的内容
DOM 操作复习
获取元素尺寸
offsetWidth / offsetHeight(只能获取不能设置)
节点对象.offsetWidth : 获取当前节点对象的相对宽度(width + border + padding)
节点对象.offsetHeight : 获取当前节点对象的相对高度(height + border + padding)
clientWidth / clientHeight
节点对象.clientWidth : 获取当前节点对象的可视区宽度(width + padding)
节点对象.clientHeight : 获取当前节点对象的可视区高度(height + padding)
获取元素偏移量
offsetLeft / offsetTop
offsetLeft : 相对左边的距离
如果父元素没有定位,则当前元素相对于页面左边(body)的left值
如果父元素有定位,则当前元素相对于父元素左边的left值。
offsetTop : 相对上边的距离
如果父元素没有定位,则当前元素相对于页面上边(body)的top值
如果父元素有定位,则当前元素相对于父元素上边的top值。
clientLeft / clientTop
clientLeft : 表示一个元素的左边框的宽度,以像素表示。
clientTop : 表示一个元素的上边框的宽度,以像素表示。
本地模拟瀑布流案例
DOM节点及以节点操作
DOM节点
DOM 的节点我们一般分为常用的三大类 元素节点 / 文本节点 / 属性节点
什么是分类,比如我们在获取元素的时候,通过各种方法获取到的我们叫做元素节点(标签节点)
比如我们标签里面写的文字,那么就是文本节点
写在每一个标签上的属性,就是属性节点
获取节点(高级选取)
firstChild : 第一个子节点
firstElementChild : 第一个元素子节点
lastChild : 最后一个子节点
lastElementChild : 最后一个元素子节点
previousSibling : 前一个兄弟节点
previousElementSibling : 前一个元素兄弟节点
nextSibling : 下一个兄弟节点
nextElementSibling : 下一个元素兄弟节点
parentNode : 父节点
childNodes : 获取到所有的元素子节点 与 文本子节点
//删除空白文本子节点
function noSpaceNode(node) {
//获取所有子节点
var childs = node.childNodes;
//遍历所有的子节点
for (var i = 0; i < childs.length; i++) {
//文本 空白
if (childs[i].nodeType === 3 && /^\s+$/.test(childs[i].nodeValue)) {
//删除空白节点
node.removeChild(childs[i]);
}
}
return node;
}
children : 获取所有的元素子节点
节点属性
nodeType
nodeType:获取节点的节点类型,用数字表示
nodeName
nodeName:获取节点的节点名称
nodeValue
nodeValue: 获取节点的值
汇总
- | nodeType | nodeName | nodeValue |
元素(标签)节点 | 1 | 大写标签名 | null |
属性节点 | 2 | 属性名 | 属性值 |
文本节点 | 3 | #text | 文本内容 |
创建节点
document.createElement('标签名') : 创建元素节点
document.createTextNode('文本') : 创建文本节点
document.createDocumentFragment() : 创建文档碎片 (为了减少与页面的交互,提高性能)
插入节点
父节点.appendChild(子节点) : 将这个子节点追加到父节点中子节点列表的末尾。
父节点.insertBefore(新节点,指定的旧的节点) : 在指定的旧节点前面插入新节点
修改节点
父节点.replaceChild(新节点,旧节点) : 替换节点
删除节点
父节点.removeChild(子节点) : 删除子节点
当前节点.remove() : 删除当前节点
克隆节点
当前节点.cloneNode([true]) : 复制节点
false(默认) : 只克隆当前节点,不包含内容。
true : 克隆当前节点,包含内容