前言: document作为window的一个重要属性,可见document的所有知识点有多么重要。
节点的类型 nodeType
节点的名字 nodeName
节点的值 nodeValue
计算样式的只读
var myDiv = document.getElementById("myDiv");
var computedStyle = document.defaultView.getComputedStyle(myDiv, null);
获取一个元素没有设置的属性,此时有一个默认值为 0px
兼容性问题
var myDiv = document.getElementById("myDiv");
var computedStyle = myDiv.currentStyle;
- 随着浏览器版本升级,H5的自定义属性就可以用来存储一些数据。
H5的自定义属性
<div class="box" data-name="box">我是boxdiv>
获取
console.log(box.dataset.xxx)
通过Js的方式设置自定义属性-(表现到HTML标签上)
与Jquery的data方法的区别
获取:
innerHTML 原封不动把内容获取到包括换行和空白。
innerText 内容有标签,过滤标签,前后的换行和空白都去掉。
innerHTM = ‘’; 会清空DOM对象中的所有内容。 其实innerHTML就是给DOM对象重新赋值的。所以会干掉元素原来的内容,重新赋值新的内容。
设置:
innerText和textContent的相同点:
innerText和textContent的不同点:
// 其实就是点击按钮的回调,交给js主动去做了。对象名.事件名();不加on
let btn = document.getElementById('btn')
btn.onclick = function() {
console.log('点击了')
}
btn.click() // 直接会触发点击的回调
1: document.write()输出内容。
2: box.innerHTML = ‘我是a标签’; 注意: 会干掉原有标签内部的节点替换为新添加的内容。
3: document.createElement(‘标签的名字’) 在内存中创建一个元素; 注意: 创建完毕以后注意要插入元素,被浏览器渲染引擎渲染。
let node =document.createElement('h1')
node.innerHTML = '我是新创建的元素innerHtml'
document.documentElement.appendChild(node)
常用的
高级的:
根据CSS选择器 获取元素:
- querySelector(‘选择器’) 返回第一个查找到的 元素 兼容性问题 ie 8 +
上下文可以是 = document / 也可以是一个DOM元素
- querySelectorAll(‘选择器’) 返回找到的所有元素 伪数组 兼容性问题 ie 8 +
上下文可以是 document / 也可以是一个DOM元素
获取DOM对象的子元素
获取兄弟节点
获取父节点
父子追加
父子移除
父子替换
.classList
为下面这几个是原来类名基础上添加相应的类名。
与className的区别
style属性指定的内联样式表信息:
- 任何支持 style 特性的 HTML元素在 JavaScript 中都有一个对应的 style 属性 , 这个 style 对象 是 CSSStyleDeclaration 的实例。包含着通过 HTML 的 style属性指定的内联样式表信息(不包含与外联样式表或嵌入式样式表的样式)。
获取: DOM.style
设置: DOm.style.width = ‘xxx’
重写元素行内样式的style特性
2、cssText
重写元素的className
一、基本概念理解
二、举例
三、获取方式一
二、 但是最简单的查询元素位置的方法:getBoundingClientRect() 返回视口坐标中的位置。
设置元素大小 (如果文档的高度超出了浏览器窗口或者说的视口,那么就可以滚动页面,那么每次滚动页面这个属性返回的值都会变化,因为元素参照的是浏览器窗口取值得)
IE、Firefox 3+、Safari 4+、Opera 9.5及 Chrome为每个元素都提供了一个 getBoundingClientRect()方法返回会一个矩形对象,
包含 4 个属性:left、top、right 和 bottom。这些属性给出了元素在文档中相对视口的位置。
// 矩形对象
// bottom: 782.2857284545898
// height: 84.5714340209961
// left: 20
// right: 480.0000305175781
// top: 697.7142944335938
// width: 460.0000305175781
// 返回元素在文档中的位置
var X = this.getBoundingClientRect().left + document.documentElement.scrollLeft;
var Y =this.getBoundingClientRect().top + document.documentElement.scrollTop;
// 目前,IE、Firefox 3.0+、Opera 9.5+都支持该方法,而Firefox 2.x、Safari、Chrome、Konqueror不支持。
四、缺点
五、废话不多说,直接上图
1:兼容性问题: 所有主流浏览器都支持这种属性
2:该属性的获取不管元素是否脱离文档流
3:这些属性都是只读的; 但是滚动大小有两个属性比较特殊。
4:dom.offsetLeft系列获取的值是就近取整。虽然页面上元素设置了 23.27偏移量,但是获取的是23,必要的时候使用Math函数挽救。
偏移量
获取距离具有定位父元素的内壁(边框以内),默认是 body左侧内壁的偏移量。
例如视口的高度为900px, 一个元素距离文档坐标,1200px, 那么offsetTop获取的就是1200px
offsetLeft:元素的左外边框至包含元素的左内边框之间的像素距离。 参照的
offsetTop:元素的上外边框至包含元素的上内边框之间的像素距离。
offsetHeight:元素在垂直方向上占用的空间大小,以像素计。包括元素的高度、(可见的) 水平滚动条的高度、上边框高度和下边框高度。
offsetWidth:元素在水平方向上占用的空间大小,以像素计。包括元素的宽度、(可见的)垂 直滚动条的宽度、左边框宽度和右边框宽度。
注意: --------- 这个属性当初一直理解错误了。还以为都是可视区的宽度呢?
这个获取具体多大的值,是根据调用该方法的DOM元素决定。
例如:
通过DOM获取文档总高度 但是Window对象也有 IE8之后也有自己的特有该属性啦
IE8 及更早版本没有提供取得当前浏览器窗口尺寸的属性, 但是
通过 DOM 提供了页面可见区域 的相关信息和上面的可见视口获取的值一样 ( 同移动端 )
通过 document.documentElement.clientWidth
根html元素访问该属性,那就是视口的大小,因为根html默认有一个滚动条,只要文档中的内容超过,视口的大小
这个滚动条就会出来, 而clientWidth获取不到内容滚动出去的距离。
通过 document.body.clientWidth那就是body元素内部的内容的大小。
客户区大小的属性有两个:clientWidth 和 clientHeight
指的是元素内容及其内边距所占据的空间大小(不包括滚动条的大小)。
其中,clientWidth 属性是元素内容区宽度加 上左右内边距宽度;
从字面上看,客户区大小就是元素内部的空间大小,因此滚动条占用的空间不计算在内。
注意: 图上说的可视区,单纯指的是这一个元素,这个元素固定大小,内容超过
父元素出现滚动条,内容滚动。
box.clientLeft: 它返回一个数值,该数值代表元素的左边框宽度。
指的是包含滚动内容的元素的大小。有些元素(例如html元素),即使没有执行任何代码也能自动地添加滚动条;
但另外一些元素,则需要通过 CSS 的 overflow: auto / scroll 属性进行设置才能滚动。
scrollHeight:元素内容的总高度(包括了滚动出去的内容的大小)。 如果一个元素高为500px 内容1000px; 访问该属性返回1000px;
scrollWidth:元素内容的总宽度。
scrollLeft:被隐藏在内容区域左侧的像素数。(滚动出去的距离)通过设置这个属性可以改变元素的滚动位置。
scrollTop:被隐藏在内容区域上方的像素数。(滚动出去的距离)通过设置这个属性可以改变元素的滚动位置。
想要设置内容滚动到指定top/left下 内容必须要超出该元素的容器,并且含有有滚动条的。
在确定文档的总高度时必须取得 scrollWidth/clientWidth 和 scrollHeight/clientHeight 中的最大值,
才能保证在跨浏览器的环境下得到精确的结果。下面就 是这样一个例子。
var docHeight = Math.max(document.documentElement.scrollHeight, document.documentElement.clientHeight);
var docWidth = Math.max(document.documentElement.scrollWidth, document.documentElement.clientWidth);
前者获取的是文档总高度,包括可视区以外的内容,后者是获取视口的高度。
var scrollTop = document.documentElement.scrollTop
var scrollLeft = document.documentElement.scrollLeft
取消默认事件 a链接的 和submit的默认表单提交
1.return false
2.JavaScript:void(0)
3.e.preventDefault() submit取消
4.e.returnValue = false;