进阶篇:DOM (11-2)

饥人谷学习进阶第 11 天

属性操作

getAttribute()
用于获取元素的attribute值

node.getAttribute('id');

createAttribute()
生成一个新的属性对象节点,并返回它。

attribute = document.createAttribute(name);

createAttribute方法的参数是要生成属性的名称

setAttribute()
用于设置元素属性

var node = document.getElementById("div1");
node.setAttribute("my_attrib","newVal")

等同于

var a = document.createAttribute("my_attrib");
a.value = "newVal";
node.setAttributeNode(a);

removeAttribute()
用于删除元素属性

node.removeAttribute('id');

element.attributes
通过类操作数组属性element.attributes来实现上述方法

innerText
可写属性,返回元素内包含的文本内容,在多层次的时候会按照元素由浅入深的顺序拼接其内容

123 456

外层的div的innerText返回内容是"123456"

innerHTML
innerHTML属性作用与innerText类似,但是 不是返回元素的文本内容,而是返回元素的HTML结构,在写入的时候也会自动构建DOM

上面html中外层div的innerHTML返回的内容是"

123456

"

常见使用方式

修改样式
可修改元素的style属性,修改结果直接反映到页面元素

document.querySelector('p').style.color = 'red'
document.querySelector('.box').style.backgroundColor = '#ccc'

获取样式getComputedStyle
使用getComputedStyle获取元素计算后的样式,不要通过node.style.属性获取

var node = document.querySelector('p')
var color = window.getComputedStyle(node).color
console.log(color)

class操作

var nodeBox = document.querySelector('.box')
console.log( nodeBox.classList )
nodeBox.classList.add('active')   //新增 class
nodeBox.classList.remove('active')  //删除 class
nodeBox.classList.toggle('active')   //新增/删除切换
node.classList.contains('active')   // 判断是否拥有 class

样式的改变尽量使用class的新增删除来实现

页面宽高

element.clientHeight
元素内部的高度+padding(border以内)

element.offsetHeight
元素内部的高度+padding+border

element.scrollHeight
元素滚动内容的总长度。如果没有出现滚动条,scrollHeight等于clientHeight

element.scrollTop
滚动的高度

element.innerHeight
窗口的高度

HTMLCollection 和 NodeList

节点都是单个对象,有时会需要一种数据结构,能够容纳多个节点。DOM提供上述两种集合对象,用于实现这种节点的集合。

NodeList对象代表一个有顺序的节点列表,HTMLCollection是一个接口,表示HTML元素的集合,它提供了可以遍历列表的方法和属性

以下方法获取为HTMLCollection对象

document.images //所有img元素
document.links //所有带href属性的a元素和area元素
document.forms //所有form元素
document.scripts //所有script元素
document.body.children
document.getElementsByClassName("class1")

以下方法获取的为NodeList对象

document.getElementsByName("name1")
document.getElementsByTagName("a")
document.querySelectorAll("a")
document.body.childNodes

查看方法

document.body.childNodes.constructor

HTMLCollection与NodeList基本相似

相同点: 都是类数组对象,节点的变化都会实时反映在集合中

不同点: 少部分方法不一样,比如 NodeList 有 forEach 方法,而 HTMLCollection 没有

你可能感兴趣的:(进阶篇:DOM (11-2))