重拾前端记忆,记录学习笔记,现在进入JavaScript Element对象及其属性部分
Element对象对应的是网页的HTML元素。每一个HTML元素,在DOM树上都会对应转化成为一个Element对象
Element.id属性返回指定元素的id属性,该属性可读可写,示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清风不渡title>
head>
<body>
<div class="box" id="txt">Hellodiv>
<script>
var txt = document.getElementById("txt");
txt.id = "hello"
script>
body>
html>
如此便将id改为了hello,结果如下:

Element.className属性 用于读写当前元素节点的class属性,他的值是一个字符串,每个class之间用空格分开,示例如:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清风不渡title>
<style>
.box1{
width: 200px;
height: 200px;
background-color: rebeccapurple;
}
style>
head>
<body>
<div class="box" id="txt">Hellodiv>
<script>
var txt = document.getElementById("txt");
txt.className = "box box1"
script>
body>
html>
结果如下,我们通过读写class属性为div添加了CSS样式:

classList对象有以下四个方法:
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清风不渡title>
<style>
.box{
width: 200px;
height: 200px;
}
.box1{
background-color: rebeccapurple;
}
style>
head>
<body>
<div class="box" id="txt">Hellodiv>
<script>
var txt = document.getElementById("txt");
txt.classList.add("box1");
if (txt.classList.contains("box")){
txt.classList.remove("box")
}
txt.classList.toggle("box")
script>
body>
html>
结果如下:

为什么经过一番操作之后,box和box1都在呢
Element.innerHTML属性返回一个字符串,等同于该元素包含的所有HTML代码。该属性可读写,常用来设置某个节点的内容。它能改写所有元素节点的内容。
给innerHTML和innerText加入参数时,都是用于修改元素标签中的内容,而两者的区别是:innerHTML可以识别标签,而innerText识别不了标签,会统一识别成一个字符串,示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清风不渡title>
<style>
.box{
width: 200px;
height: 200px;
}
style>
head>
<body>
<div class="box" id="txt1">Hellodiv>
<div class="box" id="txt2">Hellodiv>
<script>
var txt1 = document.getElementById("txt1");
var txt2 = document.getElementById("txt2");
var str = "前往百度";
txt1.innerHTML = str;
txt2.innerText = str;
script>
body>
html>
结果如下:

Element.clientHeight 返回一个整数值,表示元素节点的CSS高度(单位:像素),除了元素本身的高度,它还包括padding部分,但是不包括border和margin部分
只对块级元素生效,对于行内元素则返回0,如果块级元素没有设置高度,则返回实际高度
如果有水平滚动条,则还要【减去】水平滚动条的高度
注意:返回的值始终是整数,如果是小数则会四舍五入
常用document.documentElement.clientHeight)返回视口总高度,document.body.clientHeight返回网页总高度
Element.clientWidth返回一个整数值,表示元素节点的CSS宽度(单位:像素),除了元素本身的宽度,它还包括padding部分,但是不包括border和margin部分
只对块级元素生效,对于行内元素则返回0
如果有垂直滚动条,则还要【减去】垂直滚动条的宽度
Element.scrollHeight返回一个整数值,表示元素节点的CSS高度(单位:像素),除了元素本身的高度,它还包括padding部分,但是不包括border和margin部分
只对块级元素生效,对于行内元素则返回0,如果块级元素没有设置高度,则返回实际高度
如果有水平滚动条,则还要【加上】水平滚动条的高度
注意:返回的值始终是整数,如果是小数则会四舍五入
常用document.documentElement.scrollHeight)返回视口总高度,document.body.scrollHeight返回网页总高度(含滚动条)
Element.scrollWidth返回一个整数值,表示元素节点的CSS宽度(单位:像素),除了元素本身的宽度,它还包括padding部分,但是不包括border和margin部分
只对块级元素生效,对于行内元素则返回0
如果有垂直滚动条,则还要【加上】垂直滚动条的宽度
Element.scrollLeft 属性表示当前元素的水平滚动条向右侧滚动的像素数量
Element.scrollLeft 属性表示当前元素的垂直滚动条向下滚动的像素数量
注意:
对于没有滚动条的网页元素,scrollLeft和scrollTop的值为0
如果要查看整张网页的滚动距离,则要从document.documentElement元素上读取,如下:
document.documentElement.scrollLeft 向左的像素距离
document.documentElement.scrollTop 向上的像素距离
Element.offsetHeight 属性返回一个整数,表示元素的CSS垂直高度(单位:像素),包括元素本身的高度、padding和border
如果有水平滚动条,则还要【加上】水平滚动条的高度
Element.offsetWidth属性返回一个整数,表示元素的CSS水平宽度(单位:像素),包括元素本身的高度、padding和border
如果有垂直滚动条,则还要【加上】垂直滚动条的宽度
注意:
如果元素的CSS设定为不可见(display:none),则返回0
Element.offsetLeft 属性返回当前元素左上角相对于Element.offsetParent节点的水平位移(单位:像素)
可以理解为:到定位父级左边界的间距
Element.offsetTop属性返回当前元素左上角相对于Element.offsetParent节点的垂直位移(单位:像素)
可以理解为:到定位父级上边界的间距
注意:
当父节点没有设置定位时,一直向上寻找直至顶层文档
当父节点设置了定位时,则取距离父节点水平、垂直位移
综合以上知识点,示例代码如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清风不渡title>
<style>
*{
padding: 0;
margin: 0;
}
.box{
width: 200px;
height: 200px;
padding: 10px;
border: 5px solid red;
margin: 20px;
background-color:yellowgreen;
}
.login{
height: 150px;
width: 150px;
overflow: scroll;
}
.login1{
position: relative;
}
h1{
height: 60px;
}
style>
head>
<body>
<div class="box" id="box1">Hellodiv>
<div class="login" id="login">
<div class="box" id="box2">Hellodiv>
div>
<span id="txt">清风不渡span>
<h1>标题h1>
<h1>标题h1>
<h1>标题h1>
<h1>标题h1>
<h1>标题h1>
<h1>标题h1>
<script>
var box1 = document.getElementById("box1");
var box2 = document.getElementById("box2");
var login = document.getElementById("login");
var txt = document.getElementById("txt");
console.log("---------------------clientWidth clientHeight----------------------");
console.log("---------------------获取块级元素高宽度,含padding----------------------");
console.log(box1.clientHeight);
console.log(box1.clientWidth);
console.log("---------------------获取行内元素高宽度,返回0----------------------");
console.log(txt.clientHeight);
console.log(txt.clientWidth);
console.log("---------------------获取视口及网页高度----------------------");
console.log(document.documentElement.clientHeight);
console.log(document.body.clientHeight);
console.log("---------------------scrollHeight scrollWidth----------------------");
console.log("---------------------获取块级元素高宽度,含padding,不含滚动条----------------------");
console.log(login.clientHeight);
console.log(login.clientWidth);
console.log("---------------------获取块级元素高宽度,含padding,含滚动条----------------------");
console.log(login.scrollHeight);
console.log(login.scrollWidth);
console.log("---------------------获取行内元素高宽度,返回0----------------------");
console.log(txt.scrollHeight);
console.log(txt.scrollWidth);
console.log("---------------------获取视口及网页高度----------------------");
console.log(document.documentElement.scrollHeight);
console.log(document.body.scrollHeight);
console.log("---------------------scrollHeight scrollWidth----------------------");
console.log("---------------------获取元素水平垂直方向的滚动距离----------------------");
console.log(box2.scrollLeft);
console.log(box2.scrollTop);
console.log("---------------------获取整张网页水平垂直方向的滚动距离----------------------");
console.log(document.documentElement.scrollLeft);
console.log(document.documentElement.scrollTop);
console.log("---------------------offsetHeight offsetWidth----------------------");
console.log("---------------------获取块级元素高宽度,含padding,border----------------------");
console.log(box1.offsetHeight);
console.log(box1.offsetWidth);
console.log("---------------------获取行内元素高宽度,不返回0----------------------");
console.log(txt.offsetHeight);
console.log(txt.offsetWidth);
console.log("---------------------offsetLeft offsetTop----------------------");
console.log("---------------------获取元素左上角相对于Element.offsetParent节点的水平、垂直位移----------------------");
console.log("---------------------当父节点没有设置定位时,一直向上寻找直至顶层文档----------------------");
console.log(box2.offsetLeft);
console.log(box2.offsetTop);
console.log("---------------------获取元素左上角相对于Element.offsetParent节点的水平、垂直位移----------------------");
console.log("---------------------当父节点设置了定位时,则取距离父节点水平、垂直位移----------------------");
login.classList.add("login1");
console.log(box2.offsetLeft);
console.log(box2.offsetTop);
script>
body>
html>
页面效果如下:

控制台效果如下:
