DOM相关 对象的属性与方法
DOM
DOM - Document Object Model ( 文档对象模型 ),Javascript 本身并不能直接操作 HTML、XML 或 SVG,DOM 的 API 将 web 页面与 Javascript 连接起来,把 web 页面的各节点当作一个个对象来进行操作,使得页面的内容能通过 Javascript 进行访问和处理,是一种操作 web 页面的能力或者可以说是一种操作节点对象的思维与方法,所有对 HTML各节点进行增、删、查、改等操作都属于DOM操作。本文主要记录与分享一些常见 DOM 的属性与方法的使用 。
DOM 常用 API
document 对象的属性与方法
属性 / 方法 | 描述 |
---|---|
document.activeElement | 返回当前获取焦点元素。 |
document.addEventListener() | 向文档添加事件的回调函数。 |
document.adoptNode() | 将原来某个文档节点移除,并插入到当前文档,返回插入后的新节点。 |
document.anchors | 返回对文档中所有 Anchor 对象的引用。 |
document.baseURI | 返回文档的绝对路径。 |
document.body | 返回文档的body元素。 |
document.close() | 关闭用 document.open() 方法打开的输出流,并显示选定的数据。 |
document.cookie | 设置或返回与当前文档有关的所有 cookie。 |
document.createAttribute() | 创建一个属性对象节点。 |
document.createComment() | 创建一个注释节点。 |
document.createDocumentFragment() | 创建一个 DocumentFragment 对象,并返回此对象。 |
document.createElement() | 创建元素节点。 |
document.createTextNode() | 创建文本节点。 |
document.doctype | 返回与文档相关的文档类型声明 (DTD)。 |
document.documentElement | 返回文档的根节点。 |
document.documentURI | 设置或返回文档的地址。 |
document.domain | 返回当前文档的域名。 |
document.embeds | 返回文档中所有嵌入的内容(embed)集合 |
document.forms | 返回对文档中所有 Form 元素对象。 |
document.getElementsByClassName() | 返回文档中所有指定类名的元素集合,作为 NodeList 对象。 |
document.getElementById() | 返回对拥有指定 id 的第一个对象的引用。 |
document.getElementsByName() | 返回带有指定名称的对象集合。 |
document.getElementsByTagName() | 返回带有指定标签名的对象集合。 |
document.images | 返回对文档中所有 Image 对象引用。 |
document.implementation | 返回处理该文档的 DOMImplementation 对象。 |
document.importNode() | 把一个节点从另一个文档复制到该文档。 |
document.inputEncoding | 返回文档的编码方式。 |
document.lastModified | 返回文档被最后修改的日期和时间。 |
document.links | 返回对文档中所有 Area 和 Link 对象引用。 |
document.normalize() | 删除文本节点,并连接相邻节点。 |
document.normalizeDocument() | 删除文本节点,并连接相邻节点。 |
document.open() | 打开一个文档流,以收集来自任何 document.write() 或 document.writeln() 方法的输出。 |
document.querySelector() | 返回文档中匹配指定的CSS选择器的第一元素。 |
document.querySelectorAll() | 返回文档中匹配的CSS选择器的所有元素节点列表。 |
document.readyState | 返回文档状态 。 |
document.referrer | 返回当前文档的访问来源。 |
document.removeEventListener() | 移除文档中由 addEventListener() 方法添加事件。 |
document.renameNode() | 重命名元素或者属性节点。 |
document.scripts | 返回页面中所有脚本的集合。 |
document.strictErrorChecking | 设置或返回是否强制进行错误检查。 |
document.title | 返回当前文档的标题。 |
document.URL | 返回文档完整的URL |
document.write() | 向文档写 HTML 表达式 或 JavaScript 代码。 |
document.writeln() | 等同于 write() 方法,不同的是在每个表达式之后写一个换行符。 |
DOM 页面元素对象的属性与方法
// 获取 element ,假设页面有个元素,其id为demo var element = document.getElementById("demo")
// 获取 nodelist,假设页面有个 ul 元素,id为ul-demo,有多个子元素 li var ulElement = document.getElementById("ul-demo") var nodelist = document.getElementsByTagName("li")
属性 / 方法 | 描述 |
---|---|
element.accessKey | 设置或返回元素的激活快捷键。 |
element.addEventListener() | 向指定元素注册事件。 |
element.appendChild() | 为元素添加一个新的子元素。 |
element.attributes | 返回一个元素的属性数组。 |
element.childNodes | 返回元素的一个子节点的数组。 |
element.children | 返回元素的子元素的集合。 |
element.classList | 返回元素的类名,作为 DOMTokenList 对象。 |
element.className | 设置或返回元素的class属性。 |
element.clientHeight | 在页面上返回内容的可视高度(不包括边框,边距或滚动条)。 |
element.clientWidth | 在页面上返回内容的可视宽度(不包括边框,边距或滚动条)。 |
element.cloneNode() | 克隆某个元素。 |
element.compareDocumentPosition() | 比较两个元素的文档位置。 |
element.contentEditable | 设置或返回元素的内容是否可编辑。 |
element.dir | 设置或返回一个元素中的文本方向。 |
element.firstChild | 返回元素的第一个子节点。 |
element.focus() | 设置元素获取焦点。 |
element.getAttribute() | 返回元素的指定属性节点的值。 |
element.getAttributeNode() | 返回元素的指定属性节点。 |
element.getElementsByTagName() | 返回指定标签名的所有子元素集合。 |
element.getElementsByClassName() | 返回文档中所有指定类名的元素集合,作为 NodeList 对象。 |
element.hasAttribute() | 如果元素中存在指定的属性返回 true,否则返回false。 |
element.hasAttributes() | 如果元素有任何属性返回true,否则返回false。 |
element.hasChildNodes() | 返回一个元素是否具有任何子元素。 |
element.hasFocus() | 返回布尔值,检测元素是否获取焦点。 |
element.id | 设置或者返回元素的 id。 |
element.innerHTML | 设置或者返回元素的内容。 |
element.insertBefore() | 在指定的子元素之前插入一个新的子元素。 |
element.isContentEditable | 如果元素内容可编辑返回 true,否则返回false |
element.isDefaultNamespace() | 如果指定了namespaceURI 返回 true,否则返回 false。 |
element.isEqualNode() | 检查两个元素是否相等。 |
element.isSameNode() | 检查两个元素所有有相同节点。 |
element.isSupported() | 如果在元素中支持指定特征返回 true。 |
element.lang | 设置或者返回一个元素的语言。 |
element.lastChild | 返回的最后一个子节点。 |
element.namespaceURI | 返回命名空间的 URI。 |
element.nextSibling | 返回该元素紧跟的一个兄弟节点。 |
element.nextElementSibling | 返回指定元素之后的下一个兄弟元素(相同节点树层中的下一个元素节点)。 |
element.nodeName | 返回元素的标记名(大写)。 |
element.nodeType | 返回元素的节点类型。 |
element.nodeValue | 返回元素的节点值。 |
element.normalize() | 删除文本节点,并连接相邻节点。 |
element.offsetHeight | 返回元素的高度,包括边框和填充,但不是边距。 |
element.offsetWidth | 返回元素的宽度,包括边框和填充,但不是边距。 |
element.offsetLeft | 返回当前元素的相对水平偏移位置的偏移容器。 |
element.offsetParent | 返回当前元素节点的最靠近的、并且CSS的position属性不等于static的父元素。 |
element.offsetTop | 返回当前元素的相对垂直偏移位置的偏移容器。 |
element.ownerDocument | 返回元素的根元素(文档对象)。 |
element.parentNode | 返回元素的父节点。 |
element.previousSibling | 返回元素紧接之前的兄弟元素。 |
element.previousElementSibling | 返回元素的前一个兄弟元素(相同节点树层中的前一个元素节点)。 |
element.querySelector() | 返回匹配指定 CSS 选择器元素的第一个子元素。 |
element.querySelectorAll() | 返回匹配指定 CSS 选择器元素的所有子元素节点列表。 |
element.removeAttribute() | 从元素中删除指定的属性。 |
element.removeAttributeNode() | 删除指定属性节点并返回移除后的节点。 |
element.removeChild() | 删除一个子元素。 |
element.removeEventListener() | 移除由 addEventListener() 方法添加的事件。 |
element.replaceChild() | 替换一个子元素。 |
element.scrollHeight | 返回元素节点的总高度(包括带滚动条的隐蔽的地方)。 |
element.scrollLeft | 返回当前视图中的实际元素的左边缘和左边缘之间的距离。 |
element.scrollTop | 返回当前视图中的实际元素的顶部边缘和顶部边缘之间的距离。 |
element.scrollWidth | 返回元素的整个宽度(包括带滚动条的隐蔽的地方)。 |
element.setAttribute() | 设置或者改变指定属性值。 |
element.setAttributeNode() | 设置或者改变指定属性节点(要先获得此属性节点才能设置)。 |
element.style | 设置或返回元素的样式属性。 |
element.tabIndex | 设置或返回元素的标签顺序。 |
element.tagName | 作为一个字符串返回某个元素的标记名(大写)。 |
element.textContent | 设置或返回一个节点和它的文本内容。 |
element.title | 设置或返回元素的title属性。 |
element.toString() | 一个元素转换成字符串。 |
nodelist.item() | 返回某个元素基于文档树的索引。示例:先获取ul下的所有li,aLi.titem(2) |
nodelist.length | 返回节点列表的节点数目。示例:接上例,aLi.length |
DOM 属性对象的属性与方法
属性 / 方法 | 描述 |
---|---|
attr.name | 返回属性名称。 |
attr.value | 设置或者返回属性值。 |
attr.specified | 如果属性被指定返回 true ,否则返回 false。 |
nodemap.getNamedItem() | 从节点列表中返回的指定属性节点。 |
nodemap.item() | 返回节点列表中处于指定索引号的节点。 |
nodemap.length | 返回节点列表的节点数目。 |
nodemap.removeNamedItem() | 删除指定属性节点。 |
nodemap.setNamedItem() | 设置指定属性节点(通过名称)。 |
<!-- 假设有以下元素 --> <div id="myDemo" class="a b c demo" type="test-demo" data-a="d_a" data-b="d_b">123123123</div>
// 获取 attr var attr = document.getElementById("myDemo").attributes[0] // 获取 nodemap var nodemap = document.getElementById("myDemo").attributes console.log(attr.name) // id console.log(attr.value) // myDemo console.log(attr.specified) // true console.log(nodemap.getNamedItem('data-a')) // null console.log(nodemap.item(1)) // class="a b c demo" console.log(nodemap.length) // 5 console.log(nodemap.removeNamedItem('data-b')) // data-b="d_b"
DOM 事件对象的属性与方法
事件 | 描述 |
---|---|
onkeydown | 某个键盘按键被按下。 |
onkeypress | 某个键盘按键被按下并松开。 |
onkeyup | 某个键盘按键被松开。 |
onclick | 当鼠标左键点击元素。 |
oncontextmenu | 当鼠标右键点击元素。 |
ondblclick | 当鼠标双击元素。 |
onmousedown | 当鼠标指针在元素上按钮被按下。 |
onmouseenter | 当鼠标指针移动到元素上。 |
onmouseleave | 当鼠标指针移出元素。 |
onmousemove | 当鼠标指针在元素上移动。 |
onmouseover | 当鼠标指针移到元素之上。 |
onmouseout | 当鼠标指针从元素上移开。 |
onmouseup | 单鼠标指针在元素上按键被松开。 |
<!-- 假设页面中有以下元素 --> <div id="myDemo" style="margin: 0 auto;width: 200px;height: 200px;border: 1px solid red; text-align: center;line-height: 200px;color: blue;text-shadow: 2px 2px 2px yellow;" > </div> <div style="margin: 20px auto;width: 100%;;text-align: center;"> <input id="inpDemo" type="text" style="height: 20px;border: 1px solid red;" onkeyup ="oEvent('抬起键盘按钮','yellow')" onkeydown ="oEvent('按下键盘按钮','red')" onkeypress ="oEvent('按下抬起按钮','orange')" > </div>
// javascript var elm = document.getElementById('myDemo') var inp = document.getElementById('inpDemo') function oEvent (t,c,e) { e?console.log(e.type,'---',t,'---',c):console.log(t,'---',c) elm.innerHTML = t elm.style.background = c } elm.onclick = e=>oEvent ('点击鼠标左键','green',e) elm.oncontextmenu = e=>oEvent ('点击鼠标右键','blue',e) elm.ondblclick = e=>oEvent ('双击鼠标左键','indigo',e) elm.onmousedown = e=>oEvent ('鼠标左键按下','violet',e) elm.onmouseup = e=>oEvent ('鼠标左键抬起','pink',e) elm.onmouseenter = e=>oEvent ('鼠标移入','cyan',e) elm.onmouseleave = e=>oEvent ('鼠标移出','purple',e) elm.onmousemove = e=>oEvent ('鼠标在元素上移动','white',e) elm.onmouseover = e=>oEvent ('鼠标移到元素','black',e) elm.onmouseout = e=>oEvent ('鼠标移开元素','gary',e)
当同一个元素有多个鼠标 / 键盘事件时,其事件触发顺序如下:
- 完成一次鼠标点击,事件顺序 :mousedown > mouseup > click
- 完成一次鼠标双击,事件顺序 :mousedown > mouseup > click > mousedown > mouseup > click > dblclick
- 鼠标在元素上移动,事件顺序 :mouseover > mouseenter > mousemove > mouseout > mouseleave
- 完成一次键盘点击,事件顺序 :keydown > keypress > keyup
方法/属性 | 描述 |
---|---|
initMouseEvent() | 初始化鼠标事件对象的值 |
initKeyboardEvent() | 初始化键盘事件对象的值 |
altKey | 返回当事件被触发时,"ALT" 是否被按下。 |
button | 返回当事件被触发时,哪个鼠标按钮被点击。 |
clientX | 返回当事件被触发时,鼠标指针的水平坐标。 |
clientY | 返回当事件被触发时,鼠标指针的垂直坐标。 |
ctrlKey | 返回当事件被触发时,"CTRL" 键是否被按下。 |
Location | 返回按键在设备上的位置 |
charCode | 返回onkeypress事件触发键值的字母代码。 |
key | 在按下按键时返回按键的标识符。 |
keyCode | 返回onkeypress事件触发的键的值的字符代码,或者 onkeydown 或 onkeyup 事件的键的代码。 |
which | 返回onkeypress事件触发的键的值的字符代码,或者 onkeydown 或 onkeyup 事件的键的代码。 |
metaKey | 返回当事件被触发时,"meta" 键是否被按下。 |
relatedTarget | 返回与事件的目标节点相关的节点。 |
screenX | 返回当某个事件被触发时,鼠标指针的水平坐标。 |
screenY | 返回当某个事件被触发时,鼠标指针的垂直坐标。 |
shiftKey | 返回当事件被触发时,"SHIFT" 键是否被按下。 |
<!-- 假设页面中有以下元素 --> <div id="myDemo" style="margin: 0 auto;width: 200px;height: 200px;border: 1px solid red; text-align: center;line-height: 200px;color: blue;text-shadow: 2px 2px 2px yellow;" > </div> <div style="margin: 20px auto;width: 100%;;text-align: center;"> <input id="inpDemo" type="text" style="height: 20px;border: 1px solid red;"> </div>
// javascript var elm = document.getElementById('myDemo') var inp = document.getElementById('inpDemo') function oEvent (e) { console.log(e) } elm.onclick = e=>oEvent (e) // MouseEvent 事件对象打印如下: /* altKey: false bubbles: true button: 0 buttons: 0 cancelBubble: false cancelable: true clientX: 342 clientY: 84 composed: true ctrlKey: false currentTarget: null defaultPrevented: false detail: 1 eventPhase: 0 fromElement: null isTrusted: true layerX: 342 layerY: 84 metaKey: false movementX: 0 movementY: 0 offsetX: 84 offsetY: 75 pageX: 342 pageY: 84 path: (5) [div#myDemo, body, html, document, Window] relatedTarget: null returnValue: true screenX: 350 screenY: 200 shiftKey: false sourceCapabilities: InputDeviceCapabilities {firesTouchEvents: false} srcElement: div#myDemo target: div#myDemo timeStamp: 1962.0850002393126 toElement: div#myDemo type: "click" view: Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …} which: 1 x: 342 y: 84 */ inp.onkeypress = e=>oEvent (e) // KeyboardEvent 事件对象打印如下: /* altKey: false bubbles: true cancelBubble: false cancelable: true charCode: 97 code: "KeyA" composed: true ctrlKey: false currentTarget: null defaultPrevented: false detail: 0 eventPhase: 0 isComposing: false isTrusted: true key: "a" keyCode: 97 location: 0 metaKey: false path: (6) [input#inpDemo, div, body, html, document, Window] repeat: false returnValue: true shiftKey: false sourceCapabilities: InputDeviceCapabilities {firesTouchEvents: false} srcElement: input#inpDemo target: input#inpDemo timeStamp: 96615.16000004485 type: "keypress" view: Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …} which: 97 */
属性 | 描述 |
---|---|
onabort | 图像的加载被中断。 ( <object>) |
onbeforeunload | 该事件在即将离开页面(刷新或关闭)时触发 |
onerror | 在加载文档或图像时发生错误。 ( <object>, <body>和 <frameset>) |
onhashchange | 该事件在当前 URL 的锚部分发生修改时触发。 |
onload | 一张页面或一幅图像完成加载。 |
onpageshow | 该事件在用户访问页面时触发 |
onpagehide | 该事件在用户离开当前网页跳转到另外一个页面时触发 |
onresize | 窗口或框架被重新调整大小。 |
onscroll | 当文档被滚动时发生的事件。 |
onunload | 用户退出页面。 ( <body> 和 <frameset>) |
// javascript 页面各事件触发 window.onabort = e=>alert(e.type+'事件触发') window.onbeforeunload = e=>alert(e.type+'事件触发') window.onhashchange = e=>alert(e.type+'事件触发') window.onload = e=>alert(e.type+'事件触发') window.onpageshow = e=>alert(e.type+'事件触发') window.onpagehide = e=>alert(e.type+'事件触发') window.onresize = e=>alert(e.type+'事件触发') window.onscroll = e=>alert(e.type+'事件触发') window.onunload = e=>alert(e.type+'事件触发')
属性 | 描述 |
---|---|
onblur | 元素失去焦点时触发 |
onchange | 该事件在表单元素的内容改变时触发( <input>, <keygen>, <select>, 和 <textarea>) |
onfocus | 元素获取焦点时触发 |
onfocusin | 元素即将获取焦点时触发 |
onfocusout | 元素即将失去焦点时触发 |
oninput | 元素获取用户输入时触发 |
onreset | 表单重置时触发 |
onsearch | 用户向搜索域输入文本时触发 ( <input type="search">) |
onselect | 用户选取文本时触发 ( <input> 和 <textarea>) |
onsubmit | 表单提交时触发 |
<!-- 假设页面中有以下元素 --> <form id="formDemo" style="margin: 20px auto;width: 100%;text-align: center;" onsubmit ="return oEvent('提交form')" onreset ="return oEvent('重置')"> <input id="inpDemo" type="text" onblur ="oEvent('input 失去焦点')" onfocus ="oEvent('input 获得焦点')" oninput ="oEvent('input 正在输入')" onfocusin ="oEvent('input 即将获得焦点')" onfocusout ="oEvent('input 即将失去焦点')" onselect ="oEvent('input 选择文本')" onchange ="oEvent('input 改变值')" > <input id="searchDemo" type="search" onsearch="oEvent('搜索')"> <input id="submitBtn" type="submit" value="点击提交" > <input id="resetBtn" type="reset" value="点击重置" > </form>
// javascript function oEvent(v) { console.log(v) return false }
属性 | 描述 |
---|---|
oncopy | 该事件在用户拷贝元素内容时触发 |
oncut | 该事件在用户剪切元素内容时触发 |
onpaste | 该事件在用户粘贴元素内容时触发 |
<!-- 假设页面中有以下元素 --> <div id="demo" style="border: 1px solid red;"> <h5>全选红框内文本或输入框文本进行复制或剪切 ( <span id="txt"></span> ) </h5> <ul> <li>asdasd</li> <li>asd1asd</li> <li>asda23sd</li> <li>asda3sd</li> <li>asdasd</li> <li>asd43asd</li> <li>asdasd</li> <li>asd4asd</li> <li>asdasd</li> <li>asd4asd</li> <li>asd4353asd</li> </ul> </div> <div style="width: 100%;text-align: center;"> <input id="inpDemo" type="text" placeholder="在这里进行黏贴"> </div>
// javascript var d = document.getElementById('demo') var txt = document.getElementById('txt') var inp = document.getElementById('inpDemo') function oEvent (e) { console.log(e) txt.innerHTML = '在 '+e.srcElement.nodeName+' 元素中进行 '+e.type } inp.oncopy = e=>oEvent(e) inp.oncut = e=>oEvent(e) inp.onpaste = e=>oEvent(e) d.oncopy = e=>oEvent(e) d.oncut = e=>oEvent(e) d.onpaste = e=>oEvent(e)
事件 | 描述 |
---|---|
transitionend | 该事件在 CSS 完成过渡后触发。 |
animationend | 该事件在 CSS 动画结束播放时触发。 |
animationiteration | 该事件在 CSS 动画重复播放时触发。 |
animationstart | 该事件在 CSS 动画开始播放时触发。 |
/* 样式部分 (未作兼容处理,注意动画在各浏览器兼容) */ * { margin: 0; padding: 0; box-sizing: content-box; } .container { position: relative; top: 0; left: 0; width: 100vw; height: 100vh; background-color: skyblue; text-align: center; line-height: 100px; } div[elm="demo"] { position: absolute; top: 50%; left: 50%; margin: -100px 0 0 -100px; width: 200px; height: 200px; border: 1px solid red; background: red; transition: all 2s; transform: rotate(0deg); } .to_animation { animation: move 4s ease-in-out 1s 3; } @keyframes move { 0%{left: 50%;width: 200px;height: 200px;background: red;} 50%{left: 10%;width: 50px;height: 50px;background: yellowgreen;} 100%{left: 1000%;width: 0;height: 0;background: #000;} }
<!-- 假设页面中有以下元素 --> <div class="container"> <p id="txt">元素初始状态</p> <button>点击过渡动画开始</button> <button>点击关键帧动画开始</button> <button>回到初始状态</button> <div id="demo" elm="demo"></div> </div>
// javascript 部分,未作兼容处理,使用不同浏览器注意添加相应前缀 var d = document.getElementById('demo') var txt = document.getElementById('txt') var btns = document.getElementsByTagName('button') function handle (e) { txt.innerHTML = '监听到元素 '+ e.type e.type=='transitionend'?d.style.transform = 'rotate(0deg)':false e.type=='animationend'?d.className = '':false } btns[0].onclick = ()=> d.style.transform = 'rotate(135deg)' btns[1].onclick = ()=> d.className = 'to_animation' btns[2].onclick = ()=> {d.className = '';d.style.transform = '';txt.innerHTML = '元素初始状态'} // 方法一:用 addEventListener 监听 d.addEventListener('transitionend', handle, false) d.addEventListener('animationstart', handle, false) d.addEventListener('animationiteration', handle, false) d.addEventListener('animationend', handle, false) // 方法二:事件对象类型前加 on d.ontransitionend = (e) => handle (e) d.onanimationstart = (e) => handle (e) d.onanimationiteration = (e) => handle (e) d.onanimationend = (e) => handle (e)
事件 | 描述 |
---|---|
ondrag | 该事件在元素正在拖动时触发 |
ondragend | 该事件在完成元素的拖动时触发 |
ondragenter | 该事件在拖动的元素进入放置目标时触发 |
ondragleave | 该事件在拖动元素离开放置目标时触发 |
ondragover | 该事件在拖动元素在放置目标上时触发 |
ondragstart | 该事件在开始拖动元素时触发 |
ondrop | 该事件在拖动元素放置在目标区域时触发 |
/* 样式部分 */ * { margin: 0; padding: 0; box-sizing: content-box; } .container { position: relative; top: 0; left: 0; width: 100vw; min-height: 100vh; background-color: skyblue; text-align: center; line-height: 200px; } .txt { padding: 10px; border: 1px solid #000; } .demo { position: relative; top: 50px; margin: 0 auto 50px; width: 200px; height: 200px; border: 1px solid red; /* background: red; */ } div > span { width: 100%; height: 100%; }
<div class="container"> <p id="tips">拖动以下文字</p> <span id="txt" class="txt" draggable="true">此文字可拖动到下面方形内</span> <div id="demo1" class="demo" ></div> <div id="demo2" class="demo" ></div> </div>
// javascript 部分 var tip = document.getElementById('tips') var d1 = document.getElementById('demo1') var d2 = document.getElementById('demo2') var txt = document.getElementById('txt') function oEvent(e,c) { txt.innerText = '元素拖动 '+ e.type e.target.style.background = c } function dragstart(e,c){ oEvent(e,c) e.dataTransfer.setData("Text",e.target.id); tip.innerText = '元素开始拖动' } function dragover(e,c){ oEvent(e,c) e.preventDefault(); tip.innerText = '元素在可放置区域' } function drop(e,c){ oEvent(e,c) e.preventDefault(); var data = e.dataTransfer.getData("Text"); e.target.appendChild(document.getElementById(data)); tip.innerText = '元素已放置' } function drag (e,c) { oEvent(e,c) tip.innerText = '元素拖动中' } function dragend (e,c) { oEvent(e,c) tip.innerText = '元素拖动完成' } function dragenter (e,c) { oEvent(e,c) tip.innerText = '进入可放置区域' } function dragleave (e,c) { oEvent(e,c) tip.innerText = '离开可放置区域' } txt.ondrag = e=>drag(e,'red') // 元素正在拖动时触发 txt.ondragend = e=>dragend(e,'orange') // 完成元素的拖动时触发 txt.ondragenter = e=>dragenter(e,'purple') // 拖动的元素进入放置目标时触发 txt.ondragleave = e=>dragleave(e,'green') // 拖动元素离开放置目标时触发 txt.ondragstart = e=>dragstart(e,'cyan') // 开始拖动元素时触发 d1.ondragover = e=>dragover(e,'blue') // 拖动元素在放置目标上时触发 d1.ondrop = e=>drop(e,'yellow') // 拖动元素放置在目标区域时触发 d2.ondragover = e=>dragover(e,'#fff') // 拖动元素在放置目标上时触发 d2.ondrop = e=>drop(e,'#000') // 拖动元素放置在目标区域时触发
事件 | 描述 |
---|---|
onabort | 事件在视频/音频(audio/video)终止加载时触发。 |
oncanplay | 事件在用户可以开始播放视频/音频(audio/video)时触发。 |
oncanplaythrough | 事件在视频/音频(audio/video)可以正常播放且无需停顿和缓冲时触发。 |
ondurationchange | 事件在视频/音频(audio/video)的时长发生变化时触发。 |
onemptied | 当期播放列表为空时触发 |
onended | 事件在视频/音频(audio/video)播放结束时触发。 |
onerror | 事件在视频/音频(audio/video)数据加载期间发生错误时触发。 |
onloadeddata | 事件在浏览器加载视频/音频(audio/video)当前帧时触发触发。 |
onloadedmetadata | 事件在指定视频/音频(audio/video)的元数据加载后触发。 |
onloadstart | 事件在浏览器开始寻找指定视频/音频(audio/video)触发。 |
onpause | 事件在视频/音频(audio/video)暂停时触发。 |
onplay | 事件在视频/音频(audio/video)开始播放时触发。 |
onplaying | 事件在视频/音频(audio/video)暂停或者在缓冲后准备重新开始播放时触发。 |
onprogress | 事件在浏览器下载指定的视频/音频(audio/video)时触发。 |
onratechange | 事件在视频/音频(audio/video)的播放速度发送改变时触发。 |
onseeked | 事件在用户重新定位视频/音频(audio/video)的播放位置后触发。 |
onseeking | 事件在用户开始重新定位视频/音频(audio/video)时触发。 |
onstalled | 事件在浏览器获取媒体数据,但媒体数据不可用时触发。 |
onsuspend | 事件在浏览器读取媒体数据中止时触发。 |
ontimeupdate | 事件在当前的播放位置发送改变时触发。 |
onvolumechange | 事件在音量发生改变时触发。 |
onwaiting | 事件在视频由于要播放下一帧而需要缓冲时触发。 |
<!-- 假设页面中有以下元素 --> <video id="video" width="200px"> <source src="./libs/video/FF_cg.mp4"></source> video </video> <p id="txt"></p>
// javascript 部分 var txt = document.getElementById('txt') var audio = document.getElementById('audio') var video = document.getElementById('video') function oEvent(e) { console.log(e.type,e) var str = ` video.currentSrc --- ${video.currentSrc} video.currentTime --- ${video.currentTime} video.videoWidth --- ${video.videoWidth} video.play --- ${video.play} video.pause --- ${video.pause} video.progress --- ${video.progress} video.canPlayType --- ${video.canPlayType} video.videoHeight --- ${video.videoHeight} video.error --- ${video.error} video.duration --- ${video.duration} video.ended --- ${video.ended} video.error --- ${video.error} video.paused --- ${video.paused} video.muted --- ${video.muted} video.seeking --- ${video.seeking} video.volume --- ${video.volume} video.height --- ${video.height} video.width --- ${video.width} video.timeupdate --- ${video.timeupdate} video.ended --- ${video.ended} video.abort --- ${video.abort} video.empty --- ${video.empty} video.emptied --- ${video.emptied} video.waiting --- ${video.waiting} video.loadedmetadata --- ${video.loadedmetadata} ` txt.innerText = str } video.onabort = e=> oEvent(e) video.oncanplay = e=> oEvent(e) video.oncanplaythrough = e=> oEvent(e) video.ondurationchange = e=> oEvent(e) video.onemptied = e=> oEvent(e) video.onended = e=> oEvent(e) video.onerror = e=> oEvent(e) video.onloadeddata = e=> oEvent(e) video.onloadedmetadata = e=> oEvent(e) video.onloadstart = e=> oEvent(e) video.onpause = e=> oEvent(e) video.onplay = e=> oEvent(e) video.onplaying = e=> oEvent(e) video.onprogress = e=> oEvent(e) video.onratechange = e=> oEvent(e) video.onseeked = e=> oEvent(e) video.onseeking = e=> oEvent(e) video.onstalled = e=> oEvent(e) video.onsuspend = e=> oEvent(e) video.ontimeupdate = e=> oEvent(e) video.onvolumechange = e=> oEvent(e) video.onwaiting = e=> oEvent(e)
进入页面,事件顺序:
loadstart > durationchange > loadedmetadata > progress > suspend > loadeddata > canplay > canplaythrough
视频加载,事件顺序:
video.load() > abort > emptied > timeupdate > loadstart > durationchange > loadedmetadata > progress > suspend > loadeddata > canplay > canplaythrough
视频播放,事件顺序:
video.play() > play > playing > timeupdate*n > pause > ended
视频暂停,事件顺序:
video.pause() > timeupdate > pause
属性 | 描述 |
---|---|
onafterprint | 该事件在页面已经开始打印,或者打印窗口已经关闭时触发 |
onbeforeprint | 该事件在页面即将开始打印时触发 |
<!-- 假设页面中有以下元素 --> <div> <h1>打印内容</h1> <h2>ctrl + p 或 右击鼠标选择打印</h2> <p>aaaaaaaaaaaaaaaaaaa</p> <p>bbbbbbbbbbbbbbbbbbbb</p> <p>ccccccccccccccccccccc</p> </div>
// javascript 部分 window.onafterprint = function () { alert('进行打印或关闭了打印页面') } window.onbeforeprint = function () { alert('打开打印页面') }
常量/属性/方法 | 描述 |
---|---|
bubbles | 返回布尔值,指示事件是否是起泡事件类型。 |
cancelable | 返回布尔值,指示事件是否可拥可取消的默认动作。 |
currentTarget | 返回其事件监听器触发该事件的元素。 |
eventPhase | 返回事件传播的当前阶段。 |
target | 返回触发此事件的元素(事件的目标节点)。 |
timeStamp | 返回事件生成的日期和时间。 |
type | 返回当前 Event 对象表示的事件的名称。 |
preventDefault() | 通知浏览器不要执行与事件关联的默认动作。 |
stopPropagation() | 不再派发事件。 |
<!-- 假设页面中有以下元素 --> <div id="demo"> <div id="inner_demo"> <p id="txt">点击鼠标右键</p> </div> </div>
// javascript 部分 var d = document.getElementById('demo') var in_d = document.getElementById('inner_demo') var txt = document.getElementById('txt') function oEvent(e) { txt.innerText += '\n bubbles:'+e.bubbles // 返回布尔值,指示事件是否是起泡事件类型。 txt.innerText += '\n cancelable:'+e.cancelable // 返回布尔值,指示事件是否可拥可取消的默认动作。 txt.innerText += '\n currentTarget:'+e.currentTarget.tagName // 返回其事件监听器触发该事件的元素。 txt.innerText += '\n eventPhase:'+e.eventPhase // 返回事件传播的当前阶段。 txt.innerText += '\n target:'+e.target.tagName // 返回触发此事件的元素(事件的目标节点)。 txt.innerText += '\n timeStamp:'+e.timeStamp // 返回事件生成的日期和时间。 txt.innerText += '\n type:'+e.type // 返回当前 Event 对象表示的事件的名称。 e.preventDefault() // 通知浏览器不要执行与事件关联的默认动作。 e.stopPropagation() // 不再派发事件。 } txt.oncontextmenu = (e)=>oEvent(e)
console 对象属性与方法
方法 | 描述 |
---|---|
assert() | 如果断言为 false,则在信息到控制台输出错误信息。 |
clear() | 清除控制台上的信息。 |
count() | 记录 count() 调用次数,一般用于计数。 |
error() | 输出错误信息到控制台 |
group() | 在控制台创建一个信息分组。 一个完整的信息分组以 console.group() 开始,console.groupEnd() 结束 |
groupCollapsed() | 在控制台创建一个信息分组。 类似 console.group() ,但它默认是折叠的。 |
groupEnd() | 设置当前信息分组结束 |
info() | 控制台输出一条信息 |
log() | 控制台输出一条信息 |
table() | 以表格形式显示数据 |
time() | 计时器,开始计时间,与 timeEnd() 联合使用,用于算出一个操作所花费的准确时间。 |
timeEnd() | 计时结束 |
trace() | 显示当前执行的代码在堆栈中的调用路径。 |
warn() | 输出警告信息,信息最前面加一个黄色三角,表示警告 |
console.count('count') // 记录 count() 调用次数。 console.clear() // 清除控制台上的信息。 console.time('timer') // 计时开始,与 timeEnd() 联合使用,用于算出一个操作所花费的准确时间。 console.group('group') // 在控制台创建一个信息分组。 一个完整的信息分组以 console.group() 开始,console.groupEnd() 结束 console.count('count') // 记录 count() 调用次数。 console.error('输出错误信息到控制台 error') // 输出错误信息到控制台 console.groupCollapsed('groupCollapsed') // 在控制台创建一个信息分组。 类似 console.group() ,但它默认是折叠的。 console.count('count') // 记录 count() 调用次数。 console.info('info','控制台输出一条信息') // 控制台输出一条信息 console.log('控制台输出一条信息','log') // 控制台输出一条信息 console.table(['a','bb','ccc','dddd']) // 以表格形式显示数据 console.trace('堆栈中的调用路径 trace') // 显示当前执行的代码在堆栈中的调用路径。 console.warn('输出警告信息 warn') // 输出警告信息,信息最前面加一个黄色三角,表示警告 console.count('count') // 记录 count() 调用次数。 console.groupEnd('groupEnd') // 设置当前信息分组结束。一个完整的信息分组以 console.group() 开始,console.groupEnd() 结束 console.timeEnd('timer') // 计时结束,与 timeEnd() 联合使用,用于算出一个操作所花费的准确时间。 console.assert(1<0,'方法在第一个参数为 false 的情况下会在控制台输出此信息。') // 如果断言为 false,则在信息到控制台输出错误信息。
控制台输出如下:
CSSStyleDeclaration 对象属性与方法
属性/方法 | 描述 |
---|---|
cssText | 设置或返回样式声明文本,cssText 对应的是 HTML 元素的 style 属性。 |
length | 返回样式中包含多少条声明。 |
parentRule | 返回包含当前规则的规则。 |
getPropertyPriority() | 返回指定的 CSS 属性是否设置了 "important!" 属性。 |
getPropertyValue() | 返回指定的 CSS 属性值。 |
item() | 通过索引方式返回 CSS 声明中的 CSS 属性名。 |
removeProperty() | 移除 CSS 声明中的 CSS 属性。 |
setProperty() | 在 CSS 声明块中新建或者修改 CSS 属性。 |
<!-- 假设页面中有以下元素 --> <div id="demo" class="demo" style="display: block !important;margin: 0 auto;height: 400px;background: skyblue; border: 1px solid red;color: pink;text-align: center;line-height: 30px;" >demo.style</div>
var d = document.getElementById('demo') var style = d.style console.log('style : ',style) d.innerText += '\n cssText :'+ style.cssText // 设置或返回样式声明文本,cssText 对应的是 HTML 元素的 style 属性。 d.innerText += '\n length :'+ style.length // 返回样式中包含多少条声明。 d.innerText += '\n parentRule :'+ style.parentRule // 返回包含当前规则的规则。 d.innerText += '\n getPropertyPriority("display") :'+ style.getPropertyPriority('display') // 返回指定的 CSS 属性是否设置了 "important!" 属性。 d.innerText += '\n getPropertyPriority("border") :'+ style.getPropertyPriority('border') // 返回指定的 CSS 属性是否设置了 "important!" 属性。 d.innerText += '\n getPropertyValue("color") :'+ style.getPropertyValue('color') // 返回指定的 CSS 属性值。 d.innerText += '\n item(style.length -1) :'+ style.item(style.length -1) // 通过索引方式返回 CSS 声明中的 CSS 属性名。 d.innerText += '\n removeProperty("color") :'+ style.removeProperty('color') // 移除 CSS 声明中的 CSS 属性。 d.innerText += '\n setProperty("color","#000") :'+ style.setProperty('color','#000') // 在 CSS 声明块中新建或者修改 CSS 属性。
JavaScript 中的三大对象 (本地对象、内置对象、 宿主对象)
本地对象
- Object 对象属性和方法
- String 对象属性和方法
- Array 对象属性和方法
- Date 对象属性和方法
- Number 对象属性和方法
- RegExp 对象属性和方法
- Function 对象属性和方法
- Boolean 对象属性和方法
- Error 对象属性和方法
内置对象
宿主对象