文章目录
一、innerHTML和innerText
- 节点.innerHTML:双闭合标签里面的内容(包含标签)
- 节点. innerText:不包含标签,只有文字
- 节点.value:标签的value
二、nodeType属性:节点类型
这里讲一下nodeType属性。
nodeType == 1 表示的是元素节点(标签) 。记住:在这里,元素就是标签。
nodeType == 2 表示是属性节点。
nodeType == 3 是文本节点。
三、nodeType,nodeName,nodeValue
<div id="box" value="111">
生命壹号
</div>
上面这个标签就包含了三种节点:
元素节点(标签)
属性节点
文本节点
var element = document.getElementById("box1"); //获取元素节点(标签)
var attribute = element.getAttributeNode("id"); //获取box1的属性节点
var txt = element.firstChild; //获取box1的文本节点
//获取nodeType
console.log(element.nodeType); //1
console.log(attribute.nodeType); //2
console.log(txt.nodeType); //3
console.log("--------------");
//获取nodeName
console.log(element.nodeName); //DIV
console.log(attribute.nodeName); //id
console.log(txt.nodeName); //#text
console.log("--------------");
//获取nodeValue
console.log(element.nodeValue); //null
console.log(attribute.nodeValue); //box1
console.log(txt.nodeValue); //生命壹号
四、文档加载
- 浏览器在加载一个页面时,是按照自上向下的顺序加载的,读取到一行就运行一行。如果将script标签写到页面的上边,在代码执行时,页面还没有加载,页面没有加载DOM对象也没有加载,会导致无法获取到DOM对象。
- onload 事件:
onload 事件会在整个页面加载完成之后才触发。为 window 绑定一个onload事件,该事件对应的响应函数将会在页面加载完成之后执行,这样可以确保我们的代码执行时所有的DOM对象已经加载完毕了。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title></title>
<script type="text/javascript">
// 【方式一:先加载,后执行】这段 js 代码是写在 <head> 标签里的,所以建议放在 window.onload 里面。
window.onload = function() {
// 获取id为btn的按钮
var btn = document.getElementById("btn");
// 为按钮绑定点击事件
btn.onclick = function() {
alert("hello");
};
};
</script>
</head>
<body>
<button id="btn">点我一下</button>
<script type="text/javascript">
// 【方式二:后加载,后执行】这段 js 代码是写在 <body> 标签里的,代码的位置是处在页面的下方。这么做,也可以确保:在页面加载完毕后,再执行 js 代码。
// 获取id为btn的按钮
var btn = document.getElementById("btn");
// 为按钮绑定点击事件
btn.onclick = function() {
alert("hello");
};
</script>
</body>
</html>
>HTML DOM允许JavaScript改变HTML元素的样式
在DOM中华,如果设置样式,有两种形式
clss属性是js中式className增加标签的类选择器名字
五、行内样式设置
- style是一个对象,只能获取行内样式,不能获取内嵌的样式和外链的样式
- 语法
元素.style.样式名=样式值;
box1.style.width = “300px”;
box1.style.backgroundColor = “red”; // 驼峰命名法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div {
border: 6px solid red;
}
</style>
</head>
<body>
<div class="box1" style="width: 200px;height: 100px;background-color: pink;"></div>
<script>
var box1 = document.getElementsByTagName("div")[0];
console.log(box1.style.backgroundColor);
console.log(box1.style.border); //没有打印结果,因为这个属性不是行内样式
console.log(typeof box1.style); //因为是对象,所以打印结果是Object
console.log(box1.style); //打印结果是对象
</script>
</body>
</html>
- 因为border属性不是行内样式,所以无法通过style对象获取。
- 备注:我们通过style属性设置的样式都是行内样式,而行内样式有较高的优先级。但是如果在样式中的其他地方写了!important,则此时!important会有更高的优先级。
六、读取元素的样式
- 语法
方式一:元素.style.样式名;
方式二:元素.style[“属性”]; box.style[“width”]; //举例
方式二最大的优点是:可以给属性传递参数。
七、style属性的注意事项
- style属性需要注意一下
(1)、样式少的时候使用
(2)、style是对象。typeof的结果是Object
(3)、值是字符串,没有设置值是""
(4)、命名规则,驼峰命名
(5)、只能获取行内样式,和内嵌和外链无关
(6)、box.style.cssText=“字符串形式的样式”;
<script>
var box1 = document.getElementsByTagName("div")[0];
//通过cssText一次性设置行内样式
box1.style.cssText = "width: 300px;height: 300px;background-color: green;";
console.log(box1.style.cssText); //这一行更加可以理解,style是对象
</script>
八、style的常用属性
style的常用属性包括
- backgroundColor
- backgroundImage
- color
- width
- height
- border
- opacity(设置透明度)
注意DOM对象style的属性和标签中style内的值不一样,因为在JS中,-不能作为标识符。比如:
DOM中:backgroundColor
CSS中:background-color
九、例子
9.1、改变div的大小和透明度
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div {
border: 6px solid red;
}
</style>
</head>
<body>
<div class="box1" style="width: 200px;height: 100px;background-color: pink;"></div>
<script>
var div=document.getElementsByTagName('div')[0];
div.onclick=function () {
div.style.width='400px';
div.style.height='400px';
div.style.backgroundColor='blue';
div.style.opacity='0.6';
}
</script>
</body>
</html>
9.2、当前输入的文本框高亮显示
- 代码
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
input {
display: block;
}
</style>
</head>
<body>
<ul>
<input type="text"/>
<input type="text"/>
<input type="text"/>
<input type="text"/>
<input type="text"/>
</ul>
<script>
//需求:让所有的input标签获取焦点后高亮显示
//1.获取事件源
var inpArr = document.getElementsByTagName("input");
//2.绑定事件
//3.书写事件驱动程序
for (var i = 0; i < inpArr.length; i++) {
//获取焦点后,所有的input标签被绑定onfocus事件
inpArr[i].onfocus = function () {
this.style.border = "2px solid red";
this.style.backgroundColor = "#ccc";
}
//绑定onblur事件,取消样式
inpArr[i].onblur = function () {
this.style.border = "";
this.style.backgroundColor = "";
}
}
</script>
</body>
</html>
9.3、高级隔行变色,高亮显示
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
* {
padding: 0;
margin: 0;
text-align: center;
}
.wrap {
width: 500px;
margin: 100px auto 0;
}
table {
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #c0c0c0;
width: 500px;
}
th,
td {
border: 1px solid #d0d0d0;
color: #404060;
padding: 10px;
}
th {
background-color: #09c;
font: bold 16px "微软雅黑";
color: #fff;
}
td {
font: 14px "微软雅黑";
}
tbody tr {
background-color: #f0f0f0;
cursor: pointer;
}
.current {
background-color: red !important;
}
</style>
</head>
<body>
<div class="wrap">
<table>
<thead>
<tr>
<th>序号</th>
<th>姓名</th>
<th>课程</th>
<th>成绩</th>
</tr>
</thead>
<tbody id="target">
<tr>
<td>
1
</td>
<td>生命壹号</td>
<td>语文</td>
<td>100</td>
</tr>
<tr>
<td>
2
</td>
<td>生命贰号</td>
<td>日语</td>
<td>99</td>
</tr>
<tr>
<td>
3
</td>
<td>生命叁号</td>
<td>营销学</td>
<td>98</td>
</tr>
<tr>
<td>
4
</td>
<td>生命伍号</td>
<td>数学</td>
<td>90</td>
</tr>
<tr>
<td>
5
</td>
<td>许嵩</td>
<td>英语</td>
<td>96</td>
</tr>
<tr>
<td>
6
</td>
<td>vae</td>
<td>体育</td>
<td>90</td>
</tr>
</tbody>
</table>
</div>
<script>
//需求:让tr各行变色,鼠标放入tr中,高亮显示。
//1.隔行变色。
var tbody = document.getElementById("target");
var trArr = tbody.children;
//循环判断并各行赋值属性(背景色)
for (var i = 0; i < trArr.length; i++) {
if (i % 2 !== 0) {
trArr[i].style.backgroundColor = "#a3a3a3";
} else {
trArr[i].style.backgroundColor = "#ccc";
}
//鼠标进入高亮显示
//难点:鼠标移开的时候要回复原始颜色。
//计数器(进入tr之后,立刻记录颜色,然后移开的时候使用记录好的颜色)
var myColor = "";
trArr[i].onmouseover = function () {
//赋值颜色之前,先记录颜色
myColor = this.style.backgroundColor;
this.style.backgroundColor = "#fff";
}
trArr[i].onmouseout = function () {
this.style.backgroundColor = myColor;
}
}
</script>
</body>
</html>
十、通过js获取当前显示的样式
- 通过currentStyle和getComputedStyle()读取到的样式都是只读的,不能修改,如果要修改必须通过style属性。
- (1)、内联样式获取如上
- (2)、内部样式的获取currentStyle
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
width: 100px;
height: 100px;
border: 1px solid #000;
background: pink;
}
</style>
</head>
<body>
<div></div>
<script>
var a=document.getElementsByTagName('div')[0];
var astyle=getComputedStyle(a);
console.log(astyle.width);//100px
console.log(astyle["width"]);
</script>
</body>
</html>
—另外
let element = document.getElementById('ele');
let style = window.getComputedStyle(element);//元素样式改变时会自动更新
let display = style.display;//元素指定样式属性的值
- currentStyle对象返回所有样式i,但是只有IE和Opera支持使用CurrentStyle获取的元素计算后的样式。
getComputeStyle()方法可以获取当前元素所使用的css属性值。
·* getComputeStyle()是只读,只能获取不能设置,style能读能设;
###七、增加类名来设置样式
元素.className=“新的类”;
- 代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
width: 100px;
height: 100px;
border: 1px solid #000;
}
.show{
background: #00a4ff;
}
</style>
<script>
window.onload=function () {
var Div=document.getElementsByTagName('div')[0];
Div.onclick=function(){
Div.className="show";//关键点
}
}
</script>
</head>
<body>
<div></div>
</body>
</html>