DOM

DOM的发展(了解)

Documentc Object Model文档对象模型是针对XML但经过扩展用于HTML的应用程序接口(API Application programming Interface).DOM把整个界面都映射成多层次节点结构,每个组成部分都是某种类型的节点,通过DOM可以操作任何节点。

DOM由来

因为Internet Explorer4和Netscape Navigation4分别支持不同的DHTML(动态HTML),为了统一标准,负责制定web通信标准的W3C(World Wide Web Consortium,万维网联盟)开始制定DOM.

DOM0

Netscape Navigator 4IE4分别发布于1997年的6月和10月发布的DHTML,他们是未形成标准的试验性质的初级阶段的DOM,称为dom0,并不是标准。

DOM1

DOM1是W3C在1998年制定的标准,DOM1级主要定义了HTML和XML文档的底层结构。在DOM1中,DOM由两个模块组成:DOM Core(DOM核心)和DOM HTML。其中,DOM Core规定了基于XML的文档结构标准,通过这个标准简化了对文档中任意部分的访问和操作。DOM HTML则在DOM核心的基础上加以扩展,添加了针对HTML的对象和方法,如:JavaScript中的Document对象.

DOM2

DOM2级在原来DOM的基础上又扩充了鼠标、用户界面事件、范围、遍历等细分模块,而且通过对象接口增加了对CSS的支持。DOM1级中的DOM核心模块也经过扩展开始支持XML命名空间。在DOM2中引入了下列模块,在模块包含了众多新类型和新接口:

  • DOM视图(DOM Views):定义了跟踪不同文档视图的接口
  • DOM事件(DOM Events):定义了事件和事件处理的接口
  • DOM样式(DOM Style):定义了基于CSS为元素应用样式的接口
  • DOM遍历和范围(DOM Traversal and Range):定义了遍历和操作文档树的接口

DOM3

DOM3进一步扩展了DOM,在DOM3中引入了以下模块:

  • DOM加载和保存模块(DOM Load and Save):引入了以统一方式加载和保存文档的方法
  • DOM验证模块(DOM Validation):定义了验证文档的方法
  • DOM核心的扩展(DOM Style):支持XML 1.0规范,涉及XML Infoset、XPath和XML Base

一、概念和作用

概念

文档对象模型,Document Object Model

DOM是一个使程序和脚本有能力动态访问和更新文档内容、结构以及样式的(与平台和语言无关的)接口。

DOM描述了处理网页内容的方法和接口

作用

把网页里面的元素当成对象一样支配

DOM树(结构)

window对象也就是浏览器窗口对象,所有东西都被当作是window的子对象

文档对象document是window下的一个属性,代表整个DOM文档对象

根元素(root) html标签,之后一级一级往下分

image

文档树(DOM树) 以HTML为根节点 形成的一棵倒立的树状结构,我们称作DOM树;这个树上所有的东西都叫节点,DOM树当中有12种节点,我们需要关注的节点有4中:

  • 元素节点 标签 1
  • 属性节点 属性 2
  • 文本节点 内容 3
  • 注释节点 注释 8

这些节点如果我们通过DOM方法去获取或者其它的操作去使用的话,就叫DOM对象

获取DOM元素对象的六种方法

document下的方法,通过特定的方式获取到相关元素,封装为dom对象返回

方法 作用 说明
getElementById("id"); 通过ID来进行获取页面元素
getElementsByClassName("class") 通过class名称来获取页面元素 返回的是个HTMLCollection类数组
getElementsByTagName("TagName") 通过标签名去获取页面元素 返回的是个HTMLCollection类数组
document.getElementsByName("name") 通过name属性去获取页面元素 返回的是个NodeList类数组
querySelector() 通过CSS选择器来选择元素 找到了元素就返回1个元素
找不到就返回null
querySelectorAll() 通过CSS选择器来选择元素 返回的是个NodeList类数组

封装类似Jquery选择器的方法

Object.prototype.$=function(selector){
    let flag;
    //三目运算,如果this等于全局对象,则返回document前缀的,否则返回this前缀的
    this==window||undefined||global?flag=document:flag=this;
    //如果元素总个数为一,则返回querySelector(),否则返回querySelectorAll()
    return flag.querySelectorAll(selector).length==1?flag.querySelector(selector):flag.querySelectorAll(selector);
    //写一块的写法
    // return this==window||undefined||global?document.querySelectorAll(selector).length==1?document.querySelector(selector):document.querySelectorAll(selector):this.querySelectorAll(selector).length==1?this.querySelector(selector):this.querySelectorAll(selector);
}

获取元素的一些问题

    // getElementsByClassName 通过类名获取元素是 动态获取的
    // 这里通过"red"获取到这个类名元素的伪数组
    // 第一次点击这个类名被"blue"覆盖了,此时没有了"red"这个类名
    // 而getElementsByClassName是通过"red"这个类名动态获取的,
    // 现在没有"red"类名的元素,所以获取不到

    // 这里的问题如何解决?
    // 1. 使用 querySelectorAll 
    // 2. 使用 this 解决
    var box = document.getElementsByClassName("red");
    // 1.使用querySelectorAll
    // var box = document.querySelectorAll(".red");
    box[0].onclick = function () {
        if (box[0].className == "red") {
            box[0].className = "blue";
        } else if (box[0].className == "blue") {
            box[0].className = "green";
        }
        // 2.使用 this 解决
        // if (this.className == "red") {
        //     this.className = "blue";
        // } else if (this.className == "blue") {
        //     this.className = "green";
        // }
    }

Nodelist和HTMLCollection接口常用属性和方法

NodeList.prototype.length 返回NodeList实例包含的节点数量
NodeList.prototype.forEach() forEach方法遍历NodeList的所有成员
HTMLCollection.prototype.length 返回HTMLCollection实例包含的成员数量

小技巧:后期我们肯定会经常获取页面上面的元素,所以我们会把上面的querySelectorAll的方法封装起来

//你给我一个选择器,我返回一个选中的元素的集合给你
function $(selector){
    return document.querySelectorAll(selector);
}

jQuery选择器的本质就是这一个东西

DOM属性操作

方法 作用
标签名.属性名 获取或设置标签自己所具备的内置属性
getAttribute() 获取任何方式定义的自定义属性(行内属性)
setAttribute(属性',属性值) 设置标签的自定义属性(行内属性)
dataset['属性']或dataset.属性 H5新增设置或获取自定义属性(行内属性)的方式,设置的属性最终会添加data-前缀 i9以下不支持
dataset 获取一个DOMStringMap对象,这个对象中放了当前元素所有data开头的自定义属性(行内属性) i9以下不支持
removeAttribute() 删除任何一个属性
hasAttribute() 判断当前元素有没有这个属性 有就返回true
没有就返回`false
attributes 获取一个NamedNodeMap对象,这个对象中放了当前元素所有的自定义属性(行内属性)

Element常用属性(dom对象属性)

文本和标签内容

属性 作用 说明
innerText 获取或设置当前元素的文本内容(不包含空白符),设置的文本内容会覆盖当前元素下的后代节点
innerHTML 获取或设置当前元素的标签内容,设置的内容会覆盖当前元素下的后代节点
TextContent 获取或设置当前元素下的所有文本内容(包括空白符),设置的文本内容会覆盖当前元素下的后代节点,可以获取隐藏的节点

标签,class,属性

属性 作用 说明
tagName 返回当前元素的标签名(全大写)
className 获取或设置当前元素的class名称 使用的是字符串的方式去操作,比如添加class用+
attributes 获取一个NamedNodeMap对象,这个对象中放了当前元素所有的属性

innerText 和 textContent 的区别

​ 1.textContent会把空白符也获取到

​ 2.innerText获取不到隐藏标签的内容,textContent可以获取隐藏标签内容(visibility: hidden)

​ 3.textContent可以获取到display:none;的内容(style和script标签中的内容),innerText不可以

  1. innerText没有兼容性问题, textContent IE9 以下不支持

textContent兼容性处理

// 形参
    // node 代表传入的DOM元素
    // content 代表要设置的内容
    // 如果两个参数都传代表要设置内容
    // 如果只传第一个参数代表要获取内容
    function getOrSetContent (node, content) {
        if (node && content) { // 设置内容
            console.log(node.textContent);
            if (node.textContent) {
                node.textContent = content;
            } else {
                node.innerText = content;
            }
        } else { // 获取内容
           // 兼容处理
            if (node.textContent) { // 如果获取到值,证明是高版本浏览器,就返回
                return node.textContent;
            } else { // 获取不到,证明是IE低版本浏览器,使用没有兼容问题的innerText
                return node.innerText;
            }
        }
    }

获取第一个子元素兼容性封装

    // 目标: 获取第一个子元素(兼容处理)
    function getFirstElement(node) {
        if (node.firstElementChild) { // 证明是高版本浏览器
            return node.firstElementChild;
        } else { // 证明是IE低版本浏览器
            var result = node.firstChild;
            while (result && result.nodeType != 1) {
                result = result.nextSibling;
            }
            return result;
        }
    }

Element.classlist属性

classlist返回或设置当前元素的class名称集合(DOMTokenList集合)

classlist下的方法:

方法 作用 说明
add() 添加一个class名
remove() 移除一个class名
toggle() 有这个class就删除,否则添加
contains() 判断当前的class集合里面是否有这个class样式 true代表存在,false代表不存在

特殊的标签生成的特殊属性

网页当中有一些特殊的标签会生成一些特殊的属性

属性 作用
document.documentElement html标签生成的对象
document.title 网页的标题title标签生成的对象
document.body 网页的body标签生成的对象
document.links 网页link标签所生成的对象的集合

特殊的单属性

以下几个属性比较特性,它特殊的地方在属性值上面,返回的值要么是true,要么是false,如果是true则代属性成立,如果是false则代表属性不成立

属性 描述
readonly 表单是否只读
disabled 表单是否禁用
selected 下拉列表选项是否被选中
checked 单/多选框是否选中
loop 音视频是否循环播放
autoplay 音视频是否自动播放
muted 音视频是否禁音
<input type="checkbox" id="ck1">
<input type="text" readonly value="123123" id="userName">
<script>
	ck1.checkecd=true;   //设置为选中状态
    userName.readonly=false;  //将readonly只读设置为false
</script>

节点

DOM树所有包含的东西都可以称作节点,DOM树当中有12种节点,我们需要关注的节点有4中,其中最关注的是元素节点

节点 nodeType nodeName nodeValue
元素节点 1 元素名大写 null
文本节点 3 #text 文本内容
属性节点 2 属性名 属性值
注释节点 8 #comment 注释内容
<div id="box">
    <p id="p1" aa="bb">文本</p>	//元素节点
    一段文本					   //文本节点
    <!-- 一段注释 -->			   //注释节点
</div>

方法

方法 作用
document.write() 不常用
document.createElement() 根据标签创建一个元素节点
insertBefore(新节点,参照节点) 在参照节点前插入新节点 注意:参照节点当前节点的子节点
replaceChild(新节点, 被替换节点) 被替换节点替换成新节点 注意:被替换节点当前节点的子节点
append() 追加小括号中的内容
可以传多个参数,都是去追加,参数形式不定,不解析标签
appendChild() 向当前元素追加一个子节点
remove() 删除当前节点(里面的子节点也会随当前节点一同删除)
removeChild() 删除指定的子节点
cloneNode(true/false) 克隆一个相同的节点 默认为false,如果给true,则代表要将该元素下的子元素一同拷贝
注意cloneNode()方法无论参数是不是true,拷贝出来的都是深拷贝

属性

属性 作用 说明
children 获取当前元素下面的子元素节点 高级浏览器:元素
低版本浏览器:元素,注释
childNodes 返回当前元素的子节点信息 高级浏览器:元素,文本(文本,空格,换行),注释
低版本浏览器:元素,文本(不包括空格和换行),注释
parentElement 获取当前元素的父元素节点
parentNode 获取当前元素的父节点 在获取根部document节点是,parentElement找的是元素,因此报错null,而parentNode获取的是节点,返回的是#document
firstChild 获取第一个子节点
firstElementChild 获取当前元素下面的第一个子元素节点 相当于children[0]
IE9以下不支持
lastChild 获取最后一个子节点
lastElementChild 获取当前元素下面的最后一个子元素 IE9以下不支持
nextSibling 获取当前元素的下一个兄弟节点
nextElementSibling 获取当前元素的下一个兄弟元素节点 IE9以下不支持
previousSibling 获取当前元素的上一个兄弟节点
previousElementSibling 获取当前元素的上一个兄弟元素节点 IE9以下不支持
nodeType 返回当前元素的节点信息
nodeName 返回节点的名称(大写)
nodeValue 返回节点值

常见dom事件

MDN文档

https://developer.mozilla.org/zh-CN/docs/Web/API/Document_Object_Model

鼠标事件

属性 描述 DOM
onclick 当用户点击某个对象时调用的事件句柄。 2
ondblclick 当用户双击某个对象时调用的事件句柄。 2
onmousemove 鼠标被移动。 2
onmouseenter 当鼠标指针移动到元素上时触发。不支持冒泡(子元素的mouseenter事件不会冒泡到这个元素上) 2
onmouseleave 当鼠标指针移出元素时触发不支持冒泡(子元素的mouseleave事件不会冒泡到这个元素上) 2
onmouseover 鼠标移到某元素之上。 2
onmouseout 鼠标从某元素移开。 2
oncontextmenu 在用户点击鼠标右键时触发
onmousedown 鼠标按下触发。 2
onmouseup 鼠标松开触发。 2

两对移入移出事件的区别

onmouseenter onmouseleave

如果是一个父子元素模型,对父元素添加移入和移出,当鼠标移入父元素里面的子元素的时候, 事件并没有移出然后再移入。也就是说事件元素没有切换;

onmouseover onmouseout

如果是一个父子元素模型,对父元素添加移入和移出,当鼠标移入父元素里面的子元素的时候,事件会移出然后再移入。也就是说事件元素会有切换;事件委派的时候,必须使用这一对

滚轮事件

属性 描述 DOM
onmousewheel 滚轮滚动时触发
DOMMouseScroll 火狐用的滚轮事件,只在addEventListener里有效
onscroll 当页面被滚动条时触发
onwheel 当页面被滚轮滚动时触发

键盘事件

属性 描述 DOM
onkeydown 某个键盘按键被按下。(不识别大小写) 2
onkeypress 某个键盘按键被按下并松开。(只有a-z、A-Z、0-9、回车、空格和字符按键可以触发这个事件) 2
onkeyup 某个键盘按键被松开。 2

表单事件

属性 描述 DOM
onblur 元素失去焦点时触发 2
onchange 该事件在表单元素的内容改变时触发( <input>, <keygen>, <select>, 和 <textarea>) 2
onfocus 元素获取焦点时触发 2
onfocusin 元素即将获取焦点时触发 2
onfocusout 元素即将失去焦点时触发 2
oninput 元素获取用户输入时触发 3
onreset 表单重置时触发 2
onsearch 用户向搜索域输入文本时触发 ( <input="search">)
onselect 用户选取文本时触发 ( <input> 和 <textarea>) 2
onsubmit 表单提交时触发 2

动画事件

事件 描述 DOM
onanimationend 该事件在 CSS 动画结束播放时触发
onanimationiteration 该事件在 CSS 动画重复播放时触发
onanimationstart 该事件在 CSS 动画开始播放时触发

兼容性写法:

onwebkitanimationend等

过渡事件

事件 描述 DOM
ontransitionend 该事件在 CSS 完成过渡后触发。

剪贴板事件

属性 描述 DOM
oncopy 该事件在用户拷贝元素内容时触发
oncut 该事件在用户剪切元素内容时触发
onpaste 该事件在用户粘贴元素内容时触发

拖动事件

事件 描述 DOM
ondrag 该事件在元素正在拖动时触发
ondragend 该事件在用户完成元素的拖动时触发
ondragenter 该事件在拖动的元素进入放置目标时触发
ondragleave 该事件在拖动元素离开放置目标时触发
ondragover 该事件在拖动元素在放置目标上时触发
ondragstart 该事件在用户开始拖动元素时触发
ondrop 该事件在拖动元素放置在目标区域时触发

排他思想操作修改文本内容

<p>内容1</p>
<p>内容2</p>
<p>内容3</p>
<p>内容4</p>
<script type="text/javascript">
    var pNodes = document.querySelectorAll("p");
    for (var i = 0; i < pNodes.length; i++) {
        pNodes[i].onclick = function() {
            for (var j = 0; j < pNodes.length; j++) {
                pNodes[j].innerText = "哈哈"
            }
            this.innerText = "呵呵";
        }
    }
</script>

Style 对象属性

用来获取内嵌样式

"CSS" 列表示该属性是在哪一个 CSS 版本中定义的(CSS1、CSS2 或 CSS3)。

animation

属性 描述 CSS
animation 是下面除了 animationPlayState 属性之外的其他属性的速记属性。 3
animationDelay 设置或返回动画何时开始。 3
animationDirection 设置或返回是否循环交替反向播放动画。 3
animationDuration 设置或返回动画完成需花费的秒数或毫秒数。 3
animationFillMode 设置或返回当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素的样式。 3
animationIterationCount 设置或返回动画的播放次数。 3
animationName 设置或返回关键帧 @keyframes 动画的名称。 3
animationTimingFunction 设置或返回动画的速度曲线。 3
animationPlayState 设置或返回动画是运行的还是暂停的。 3

transform

属性 描述 CSS
transform 向元素应用 2D 或 3D 转换。 3
transformOrigin 设置或返回被转换元素的位置。 3
transformStyle 设置或返回被嵌套的元素如何呈现在 3D 空间中。 3

transiton

属性 描述 CSS
transition 一个用于设置或返回四个过渡属性的速记属性。 3
transitionProperty 应用过渡效果的 CSS 属性的名称。 3
transitionDuration 设置或返回完成过渡效果需要花费的时间(以秒或毫秒计)。 3
transitionTimingFunction 设置或返回过渡效果的速度曲线。 3
transitionDelay 设置或返回过渡效果何时开始。 3

background

属性 描述 CSS
background 设置或返回在一个声明中的所有背景属性。 1
backgroundAttachment 设置或返回背景图像是否固定或随页面滚动。 1
backgroundColor 设置或返回元素的背景色。 1
backgroundImage 设置或返回元素的背景图像。 1
backgroundPosition 设置或返回的背景图像的起始位置。 1
backgroundRepeat 设置或返回如何重复背景图像。 1
backgroundClip 设置或返回背景的绘制区域。 3
backgroundOrigin 设置或返回背景图像的定位区域。 3
backgroundSize 设置或返回背景图像的大小。 3
backfaceVisibility 设置或返回当一个元素背对屏幕时是否可见。 3

border

属性 描述 CSS
border 设置或返回在一个声明中的 borderWidth、borderStyle 和 borderColor。 1
borderBottom 设置或返回在一个声明中的所有 borderBottom* 属性。 1
borderCollapse 设置或返回表格的边框是否被折叠为一个单一的边框。 2
borderColor 设置或返回元素边框的颜色(最多可以有四个值)。 1
borderImage 一个用于设置或返回所有的 borderImage* 属性的速记属性。 3
borderImageOutset 设置或返回边框图像区域超出边界框的量。 3
borderImageRepeat 设置或返回图像边框是重复拼接图块还是延伸图块。 3
borderImageSlice 设置或返回图像边框的向内偏移。 3
borderImageSource 设置或返回要作为边框使用的图像。 3
borderImageWidth 设置或返回图像边框的宽度。 3
borderRadius 一个用于设置或返回四个 borderRadius 属性的速记属性。 3
borderStyle 设置或返回元素边框的样式(最多可以有四个值)。 1
borderWidth 设置或返回元素边框的宽度(最多可以有四个值)。 1

flex

属性 描述 CSS
flex 相对于同一容器其他灵活的项目,设置或返回项目的长度。 3
flexDirection 设置或返回灵活项目的方向。 3
flexWrap 设置或返回灵活项目是否拆行或拆列。 3
flexFlow 是 flexDirection 和 flexWrap 属性的速记属性。 3
alignItems 设置或返回灵活容器内的各项的对齐方式。 3
alignContent 设置或返回当灵活容器内的各项没有占用所有可用的空间时各项之间的对齐方式(水平)。 3
order 设置或返回一个灵活的项目相对于同一容器内其他灵活项目的顺序。 3
alignSelf 设置或返回灵活容器内被选中项目的对齐方式。 3
flexGrow 设置或返回项目将相对于同一容器内其他灵活的项目进行扩展的量。 3
flexBasis 设置或灵活项目的初始长度。 3
flexShrink 设置或返回项目将相对于同一容器内其他灵活的项目进行收缩的量。 3

list

属性 描述 CSS
listStyle 设置或返回一个声明中的 listStyleImage、listStylePosition 和 listStyleType。 1
listStyleImage 设置或返回作为列表项标记的图像。 1
listStylePosition 设置或返回列表项标记的位置。 1
listStyleType 设置或返回列表项标记的类型。 1

column

属性 描述 CSS
columns 一个用于设置或返回 columnWidth 和 columnCount 的速记属性。 3
columnCount 设置或返回元素应该被划分的列数。 3
columnFill 设置或返回如何填充列。 3
columnGap 设置或返回列之间的间隔。 3
columnRule 一个用于设置或返回所有的 columnRule* 属性的速记属性。 3
columnRuleColor 设置或返回列之间的颜色规则。 3
columnRuleStyle 设置或返回列之间的样式规则。 3
columnRuleWidth 设置或返回列之间的宽度规则。 3
columnSpan 设置或返回一个元素应横跨多少列。 3
columnWidth 设置或返回列的宽度。 3
counterIncrement 增加一个或多个计数器。 2
counterReset 创建或重置一个或多个计数器。 2

文本和字体

属性 描述 CSS
textAlign 设置或返回文本的水平对齐方式。 1
textDecoration 设置或返回文本的修饰。 1
textDecorationColor 设置或返回文本修饰的颜色。 3
textDecorationLine 设置或返回文本修饰要使用的线条类型。 3
textDecorationStyle 设置或返回文本修饰中的线条样式。 3
textIndent 设置或返回文本第一行的缩进。 1
textJustify 设置或返回当 text-align 属性设置为 "justify" 时,要使用的对齐方法。 3
textAlignLast 设置或返回当 text-align 属性设置为 "justify" 时,如何对齐一个强制换行符前的最后一行。 3
textOverflow 设置或返回当文本溢出包含它的元素,应该发生什么。 3
textShadow 设置或返回文本的阴影效果。 3
textTransform 设置或返回文本的大小写。 1
font 设置或返回一个声明中的 fontStyle、fontVariant、fontWeight、fontSize、lineHeight 和 fontFamily。 1
fontFamily 设置或返回文本的字体。 1
fontSize 设置或返回文本的字体尺寸。 1
fontStyle 设置或返回字体样式是否是 normal(正常的)、italic(斜体)或 oblique(倾斜的)。 1
fontVariant 设置或返回是否以小型大写字母显示字体。 1
fontWeight 设置或返回字体的粗细。 1
verticalAlign 设置或返回元素中内容的垂直对齐方式。 1
whiteSpace 设置或返回如何处理文本中的制表符、换行符和空格符。 1
wordSpacing 设置或返回文本中单词之间的空间。 1
wordWrap 允许长单词或 URL 地址换行到下一行。 3
wordBreak 设置或返回非 CJK 语言的换行规则。 3
justifyContent 设置或返回当灵活容器内的各项没有占用所有可用的空间时各项之间的对齐方式(垂直)。 3
letterSpacing 设置或返回文本中字符之间的空间。 1
direction 设置或返回文本的方向。 2
lineHeight 设置或返回在文本中行之间的距离。 1

其他

属性 描述 CSS
perspective 设置或返回 3D 元素被查看的视角。 3
perspectiveOrigin 设置或返回 3D 元素的底部位置。 3
width 设置或返回元素的宽度。 1
height 设置或返回元素的高度。 1
visibility 设置或返回元素是否应该是可见的。
zIndex 设置或返回定位元素的堆叠顺序。 2
resize 设置或返回是否可由用户调整元素的尺寸大小。 3
cssFloat 设置或返回元素的浮动方向。 1
content 与 :before 和 :after 伪元素一起使用,来插入生成的内容。 2
color 设置或返回文本的颜色。 1
cursor 设置或返回鼠标指针显示的光标类型。 2
display 设置或返回元素的显示类型。 1
filter 设置或返回图片滤镜(可视效果,如:高斯模糊与饱和度) 3
tableLayout 设置或返回表格单元格、行、列的布局方式。 2
tabSize 设置或返回制表符(tab)字符的长度。 3
captionSide 设置或返回表格标题的位置。 2
emptyCells 设置或返回是否显示表格中的空单元格的边框和背景。 2
boxDecorationBreak 设置或返回分页处元素的背景和边框行为,或者换行处内联元素的背景和边框行为。 3
boxShadow 设置或返回元素的下拉阴影。 3
boxSizing 允许您以特定的方式定义匹配某个区域的特定元素。 3
clear 设置或返回元素相对浮动对象的位置。 1
margin 设置或返回元素的外边距(最多可以有四个值)。 1
padding 设置或返回元素的内边距(最多可以有四个值)。 1
maxHeight 设置或返回元素的最大高度。 2
maxWidth 设置或返回元素的最大宽度。 2
minHeight 设置或返回元素的最小高度。 2
minWidth 设置或返回元素的最小宽度。 2
opacity 设置或返回元素的不透明度。 3
outline 设置或返回在一个声明中的所有 outline 属性。 2
outlineColor 设置或返回一个元素周围的轮廓颜色。 2
outlineOffset 对轮廓进行偏移,并在边框边缘进行绘制。 3
outlineStyle 设置或返回一个元素周围的轮廓样式。 2
outlineWidth 设置或返回一个元素周围的轮廓宽度。 2
overflow 设置或返回如何处理呈现在元素框外面的内容。 2
overflowX 规定如果内容溢出元素的内容区域,是否对内容的左/右边缘进行裁剪。 3
overflowY 规定如果内容溢出元素的内容区域,是否对内容的上/下边缘进行裁剪。 3

没见过

属性 描述 CSS
orphans 设置或返回当元素内有分页时,必须在页面底部预留的最小行数。 2
unicodeBidi 设置或返回文本是否被重写,以便在同一文档中支持多种语言。 2
widows 设置或返回一个元素必须在页面顶部的可见行的最小数量。 2
quotes 设置或返回嵌入引用的引号类型。 2
fontSizeAdjust 当使用备用字体时,确保文本的可读性。 3
fontStretch 从字体库中选择一种正常的、浓缩的或扩大的字体。 3
hangingPunctuation 规定一个标点符号是否可以放置在线框外。 3
hyphens 设置如何拆分单词来提高段落布局。 3
imageOrientation 规定一个用户代理应用到图像上的顺时针方向的旋转。 3
icon 向作者提供为一个带有等价于图标的元素定义样式的功能。 3
navIndex 设置或返回元素的显示顺序。 3
navUp 设置或返回当使用向上箭头导航键时要导航到哪里。 3
navDown 设置或返回当使用向下箭头导航键时要导航到哪里。 3
navLeft 设置或返回当使用向左箭头导航键时要导航到哪里。 3
navRight 设置或返回当使用向右箭头导航键时要导航到哪里。 3
pageBreakAfter 设置或返回元素后的分页行为。 2
pageBreakBefore 设置或返回元素前的分页行为。 2
pageBreakInside 设置或返回元素内的分页行为。 2

获取css样式

方法 描述 返回值
getComputedStyle(元素节点) 获取当前元素节点所有最终使⽤的CSS属性值。 返回的是⼀个CSS样式对象([object CSSStyleDeclaration]
元素节点.currentStyle ie获取非内嵌样式的方式
元素节点.style 获取设置内嵌样式

事件绑定和解绑

网址:

https://www.w3cschool.cn/javascript_guide/javascript_guide-p9ug269r.html

什么是事件?

事件是一种异步编程的实现方式,本质上是程序各个组成部分之间的通信。具有如下特征:

  1. 事件三要素
    • 事件源 (承受事件的对象)
    • 事件类型(如onclick)
    • 事件处理回调函数
  2. 事件处理三大步
    1. 获取事件源DOM对象
    2. 添加对应事件监听
    3. 书写处理回调
  3. 事件写好之后可以重复触发执行

事件处理函数的参数

事件处理函数的参数在没有事件触发时,与普通函数没有区别

在事件触发时,第一个参数是触发的事件对象(会覆盖传的第一个实参),鼠标事件对象是(PointerEvent),键盘事件对象是(KeyboardEvent)

DOM 0 1 2 3

dom0 和 dom2 有自己独立的事件绑定和解绑方式

dom0 事件所有的浏览器都是通用的

dom2 事件高级浏览器和低级浏览器用的方法不同

dom1 和 dom3 没有事件绑定方式

什么是事件绑定和解绑?

事件绑定就是我们说的事件监听

事件解绑就是我们说的移除事件监听

冒泡与捕获

冒泡指事件从内到外触发

捕获指事件从外到内触发

监听函数分类

常见的监听函数有两种

  1. on-事件(DOM0事件绑定)
  2. addEventListener(DOM2事件绑定)

通过on设置的监听函数只在冒泡阶段触发

通过addEventListener设置的监听函数看三个参数的值确定在冒泡还是捕获阶段触发

事件绑定和解绑方法

注意removeEventListener方法移除的监听函数,必须与对应的addEventListener方法的参数完全一致,而且必须在同一个元素节点,否则无效。

方法
元素.on事件类型=事件处理函数 DOM0绑定事件方式
元素.on事件类型=null DOM0解绑事件方式
元素.addEventListener('事件类型',事件处理回调函数,Boolean) DOM2绑定事件方式
默认为false(监听函数只在冒泡阶段被触发)
true为(监听函数只在捕获阶段被触发)
元素.removeEventListener('事件类型',事件处理回调函数,Boolean) DOM2解绑事件方式,参数必须与addEventListener绑定的事件相同
元素.attachEvent("on事件类型", 事件处理回调函数) DOM2绑定事件方式,低版本IE浏览器使用
元素.detachEvent("on事件类型", 事件处理回调函数) DOM2解绑事件方式,低版本IE浏览器使用

绑定事件的简单封装

	//封装简单的事件绑定函数
    //this代表调用封装函数的DOM对象,type代表事件类型,fn代表事件处理回调函数
    Object.prototype.addEvents=function (type,fn){
        //判断是不是少参数
        if(arguments.length<2){
            //判断少了哪个参数(只要不乱写,事件类型一定是字符串类型)
            typeof type=='string'?console.error('小伙子,你的事件处理回调函数没输入'):console.error('小伙子,你的事件类型没输入')
        //判断是不是高版本浏览器
        }else if(this.addEventListener){
            this.addEventListener(type,fn);
        //如果不是高版本浏览器执行以下代码
        }else{
            this.attachEvent(`on${type}`,fn);
        }
    }

解绑事件的基础封装

	//封装简单的事件解绑函数
    //this代表调用封装函数的DOM对象,type代表事件类型,fn代表事件处理回调函数
    Object.prototype.removeEvents=function (type,fn){
        //判断是不是少参数
        if(arguments.length<2){
            //判断少了哪个参数(只要不乱写,事件类型一定是字符串类型)
            typeof type=='string'?console.error('小伙子,你的事件处理回调函数没输入'):console.error('小伙子,你的事件类型没输入')
        //判断是不是高版本浏览器
        }else if(this.removeEventListener){
            this.removeEventListener(type,fn);
        //如果不是高版本浏览器执行以下代码
        }else{
            this.detachEvent(`on${type}`,fn);
        }
    }

事件流

什么是事件流?

事件流描述的是从页面中接收事件的顺序。

早期的IE和Netscape(网景)提出了完全相反的事件流概念,IE事件流是事件冒泡,而Netscape的事件流就是事件捕获。由于IE低版本浏览器不支持事件捕获,所以很少使用事件捕获。后来ECMAScript在DOM2中对事件流进行了进一步规范。规定的事件流包括三个阶段。

事件流的三个阶段

当一个事件发生以后,它会在不同的DOM节点之间传播(propagation)。这种传播分成三个阶段:

  • 第一阶段:从事件源(如果没有指定事件源则从window对象)传导到触发事件的目标节点,称为“捕获阶段”(capture phase)。
  • 第二阶段:在触发事件的目标节点上触发事件,称为“目标阶段”(target phase)。
  • 第三阶段:从触发事件的目标节点传导回事件源(如果没有指定事件源则从window对象),称为“冒泡阶段”(bubbling phase)。

阻止事件冒泡

方法 介绍
event.stopPropagation(); 阻止事件传播(冒泡捕获都可以阻止)
event.cancelBubbles 低版本ie使用,赋值为true代表阻止冒泡,赋值为false代表允许冒泡
event.bubbles 事件是否冒泡

简单的阻止事件冒泡封装

function stopBubble(e){
	var e=e||Window.event;
	if(e.cancelBubble){
		e.cancelBubble
	}else{
		e.stopPropagation();
	}
}

事件委派(代理)

属性 描述 返回值 DOM
target 事件最初发生的节点 返回触发事件的那个节点
2
srcElement IE6—IE8的事件节点写法

由于事件会在冒泡阶段从事件触发的节点向上传播到父/祖先节点,因此可以把事件处理函数定义在父/祖先节点上,由父/祖先节点的事件处理函数统一处理多个子/后代元素的事件。这种方法叫做事件的代理(delegation)。

var ul = document.querySelector('ul');

ul.addEventListener('click', function(event) {
  if (event.target.tagName.toLowerCase() === 'li') {
    // some code
  }
});
posted @ 2022-04-11 20:55  听风小弟  阅读(154)  评论(0)    收藏  举报