JavaScript HTML DOM操作
DOM的样式编程
- className属性
className属性可以用来读取或设置HTML元素对象的class属性
当将className属性设置为空字符串时,代表移除所有的样式 - classList对象
所有浏览器的 childNodes 属性返回的是 NodeList 对象。
大部分浏览器的 querySelectorAll() 返回 NodeList 对象。
每个节点上都有一个classList对象,提供了方法新增、删除、修改节点上的样式类
- style对象
style对象包含了与每个CSS样式对应的属性,只是格式略有不同:
对于单个单词的CSS样式,以相同的名字属性来表示(例如,color样式通过style.color表示)
对于两个单词的CSS样式,则是通过去除横杠,将第一个单词加上首字母大写的第二个单词(例如:background-color样式对应style.backgroundColor)
可以方便获取HTML元素对象的style属性所定义的CSS样式值,但它无法获取在外部定义的CSS样式。 - HTMLCollection 对象1
getElementsByTagName() 方法返回 HTMLCollection 对象。
HTMLCollection 对象类似包含 HTML 元素的一个数组。
HTMLCollection 对象的 length 属性定义了集合中元素的数量。
例:
var myCollection = document.getElementsByTagName("p");
document.getElementById("demo").innerHTML = myCollection.length;
- HTMLCollection 与 NodeList 的区别
HTMLCollection 是 HTML 元素的集合。
只有 NodeList 对象有包含属性节点和文本节点。
NodeList 是一个文档节点的集合。
NodeList 与 HTMLCollection 都与数组对象有点类似,可以使用索引 (0, 1, 2, 3, 4, …) 来获取元素。
NodeList 与 HTMLCollection 都有 length 属性。通常用作遍历操作
HTMLCollection 元素可以通过 name,id 或索引来获取。
相同点,与数组的区别:
均看起来可能是一个数组,但其实不是。
你可以像数组一样,使用索引来获取元素。
均无法使用数组的方法: valueOf(), pop(), push(), 或 join() 。
事件
JavaScript是基于对象(object-based)的语言,基于对象的基本特征,就是采用事件驱动(event drive)。事件是在浏览器中可以被 JavaScript 侦测到的行为,例如用户点击了按钮,移动了手指,都会触发相应的事件
常用事件
- 鼠标:onmousedown、onmousemove、onmouseup、onclick、ondbclick等
- 键盘:onkeydown、onkeyup、onkeypress等
- 触摸:ontouchmove、ontouchend、ontouchstart、ontouchend等
- 其他一些事件:onfocus、onblur、onresize、onload、onunload等
内联属性监听事件
- 先定义好函数 <input type=“button” value=“运行JS函数” οnclick="eventTest();"/>
- 也可以οnclick=“alert(‘hello’)”;
DOM属性监听事件
只能添加一个事件,后添加的会把之前的覆盖掉,只保留最后一个事件
var oInput1=document.getElementById("mybutton1");
oInput1.onclick=function(){
nnalert("hello world");
}
标准的事件监听函数
- 若为true表示事件监听是在“捕获”阶段中监听,false表示在“冒泡”阶段中监听,该参数为可选项
可以形成一个事件队列,依次执行
element.addEventListener("mouseover", myFunction,true);
element.addEventListener("click", mySecondFunction,false);
element.addEventListener("mouseout", myThirdFunction);
- removeEventListener() 方法
removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄:
element.removeEventListener(“mousemove”, myFunction);
注意:这里的事件为 click 而非 onclick,注意 标准的事件监听函数 与 DOM属性监听事件 的区别
事件触发过程
事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 “click” 事件先被触发呢?
- 冒泡
内部元素的事件会先被触发,然后再触发外部元素,即:<p> 元素的点击事件先触发,然后会触发<div> 元素的点击事件。 - 捕获
外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。
事件的Event对象
当一个事件被触发的时候,会创建一个事件对象(Event Object),这个对象里面包含了一些有用的属性或者方法。事件对象会作为第一个参数,传递给我们的回调函数。事件对象包含了很多有用的信息,比如事件触发时,鼠标在屏幕上的坐标、被触发的 DOM 详细信息等