三.样式操作与属性操作
JS DOM
DOM 简介
什么是DOM
文档对象模型(Document Object Model,简称 DOM),是 W3C 组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口
W3C 已经定义了一系列的 DOM 接口,通过这些 DOM 接口可以改变网页的内容、结构和样式
DOM树
- 文档:一个页面就是一个文档,DOM 中使用 document 表示
- 元素:页面中的所有标签都是元素,DOM 中使用 element 表示
- 节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM 中使用 node 表示
DOM 把以上内容都看做是对象
获取元素
获取页面中的元素可以使用以下几种方式:
- 根据 ID 获取
- 根据标签名获取
- 通过 HTML5 新增的方法获取
- 特殊元素获取
根据 ID 获取
使用 getElementById() 方法可以获取带有 ID 的元素对象
document.getElementById('id');
使用 console.dir() 可以打印我们获取的元素对象,更好的查看对象里面的属性和方法
根据标签名获取
使用 getElementsByTagName() 方法可以返回带有指定标签名的对象的集合
document.getElementsByTagName('标签名');
注意:
- 因为得到的是一个对象的集合,所以我们想要操作里面的元素就需要遍历
- 得到元素对象是动态的
- 如果获取不到元素,则返回为空的伪数组(因为获取不到对象)
通过 HTML5 新增的方法获取
根据类名返回元素对象集合
document.getElementsByClassName('类名');
根据指定选择器返回第一个元素对象
document.querySelector('选择器');
根据指定选择器返回
document.querySelectorAll('选择器');
注意:querySelector 和 querySelectorAll 里面的选择器需要加符号,比如:document.querySelector('#nav');
获取特殊元素(html, head, title, body)(不太常用)
获取body, html, title, body元素
document.documentElement // 返回html元素对象
document.head // 返回head元素对象
document.title // 返回title元素对象
documnet.body // 返回body元素对象
样式属性操作
可以通过 JS 修改元素的大小、颜色、位置等样式
- element.style:行内样式操作
- element.className:类名样式操作
注意:
- JS 里面的样式采取驼峰命名法 比如 fontSize、 backgroundColor
- JS 修改 style 样式操作,产生的是行内样式,CSS 权重比较高
事件基础
事件概述
JavaScript 使我们有能力创建动态页面,而事件是可以被 JavaScript 侦测到的行为
简单理解: 触发— 响应机制
网页中的每个元素都可以产生某些可以触发 JavaScript 的事件,例如,我们可以在用户点击某按钮时产生一个 事件,然后去执行某些操作
事件三要素
- 事件源 (谁)
- 事件类型 (什么事件)
- 事件处理程序 (做啥)
常见的鼠标事件
操作元素
JavaScript 的 DOM 操作可以改变网页内容、结构和样式,我们可以利用 DOM 操作元素来改变元素里面的内容 、属性等
改变元素内容
-
element.innerText
:从起始位置到终止位置的内容,但它去除 html 标签, 同时空格和换行也会去掉 -
element.innerHTML
:起始位置到终止位置的全部内容,包括 html 标签,同时保留空格和换行
//得到对应的标签(获取节点/获取元素/获取标签),以用于后续的操作
/*通过id获取:*/
let a = document.getElementById( "wrap" );
//注册事件
/*
* onclick 左键单击
* onmouseenter 鼠标移入
* onmouseleave 鼠标离开
*
* */
/*a.onclick = function(){
alert("你点什么呢!!");
};*/
a.onmouseenter = function(){
console.log("鼠标移入啦!");
};
a.onmouseleave = function(){
console.log("鼠标离开啦!");
};
补充:JS鼠标右击事件
/*方法一
*首先取消右键的系统默认弹窗
*/
document.oncontextmenu = function(e){
return false
//或者 e.preventDefault()
}
//用onmouseup或者onmousedown代替点击事件
//onclick事件无法用e.button判断鼠标左右键。
/*方法二
*用onmouseup或者onmousedown代替点击事件
*/
document.onmouseup = function(e){
if(e.button == 2){
console.log('右键点击了');
}
}
(e.button == 0对应鼠标左键,e.button == 1对应鼠标中键)
/*方法二
*浏览器默认行为 oncontextmenu事件
*/
document.oncontextmenu = function(e){
//点击右键后要执行的代码
//.......
return false;//阻止浏览器的默认弹窗行为
}
样式操作
//操作内部样式表 不常用
/*let gd = document.getElementById("goudan");
gd.innerText = "#nav{background-color:red}";*/
/*操作行内样式*/
let oNav = document.getElementById("nav");
/*如果操作 标签属性?*/
/*合法标签属性*/
oNav.title = "我是提示!";
// oNav.id = "goudan";
oNav.className = "abc"; //class比较特殊
/*不合法标签属性 -- 以后在再说*/
操作标签属性
<style>
#nav.abc{height: 120px;}
</style>
<div id="nav">文字</div>
<script>
let oNav = document.getElementById("nav");
oNav.onclick = function(){
oNav.className = "abc";
};
/*操作合法标签*/
/*oNav.title = "加个title";
oNav.className = "abc"; //class比较特殊 PS:直接写class虽然不会报错,但是类名不会被浏览器解析出来
</script>