Element 节点 (元素节点)node
是一组对象数组
对应网页的 HTML 元素浏览器
每个 HTML 元素,在 DOM 树上都会转化成一个 Element 节点对象(如下简称元素节点)安全
全部元素节点的 nodeType 属性都是 1函数
浏览器使用不一样的构造函数,生成不一样的元素节点,有各自构造函数的属性和方法spa
id
属性,该属性可读写,
// HTML 代码以下 // <button accesskey="h" id="btn">点击</button> var btn = document.getElementById('btn'); btn.accessKey // "h"
上面代码中,btn元素的快捷键是h,按下 Alt + h 就能将焦点转移到它上面code
el.classList.toggle('abc', boolValue); // 等同于 if (boolValue) { el.classList.add('abc'); } else { el.classList.remove('abc'); }
var foo = document.getElementById('foo'); // 添加class foo.className += 'bold'; foo.classList.add('bold'); // 删除class foo.classList.remove('bold'); foo.className = foo.className.replace(/^bold$/, '');
// <article // id="foo" // data-columns="3" // data-index-number="12314" // data-parent="cars"> // ... // </article>
var article = document.getElementById('foo'); foo.dataset.columns // "3"
foo.dataset.indexNumber // "12314"
foo.dataset.parent // "cars"
// data-abc-def 对应 dataset.abcDef
// data-abc-1 对应 dataset["abc-1"]
var name = "<img src=x onerror=alert(1)>"; el.innerHTML = name;
上面代码中,alert方法是会执行的。对象
所以为了安全考虑,若是插入的是文本,最好用 textContent 属性代替 innerHTMLblog
// 获取元素 在 网页 中的 坐标 Test Already. function getElementPosition(ele) { var left = 0; var top = 0; var p = ele; while (p !== null) { left += p.offsetLeft; top += p.offsetTop; p = p.offsetParent; // 遍历相对元素的坐标 } var pageHeight = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); var pageWidth = Math.max(document.body.scrollWidth, document.documentElement.scrollWidth); return { left: left, top: top, right: pageWidth - left - ele.offsetWidth, bottom: pageHeight - top - ele.offsetHeight }; }
// HTML 代码以下 // <article> // <div id="div-01">Here is div-01 // <div id="div-02">Here is div-02 // <div id="div-03">Here is div-03</div> // </div> // </div> // </article> var div03 = document.getElementById('div-03'); // div-03 最近的祖先节点 div03.closest("#div-02") // div-02 div03.closest("div div") // div-03 div03.closest("article > div") //div-01 div03.closest(":not(div)") // article
element.addEventListener('click', listener, false); element.removeEventListener('click', listener, false); var event = new Event('click'); element.dispatchEvent(event);
el.scrollIntoView(); // 等同于el.scrollIntoView(true) el.scrollIntoView(false); // 若是为true,表示元素的顶部与当前区域的可见部分的顶部对齐(前提是当前区域可滚动) // 若是为false,表示元素的底部与当前区域的可见部分的尾部对齐(前提是当前区域可滚动) // 若是没有提供该参数,默认为true
x // 元素左上角相对于视口的横坐标 y // 元素左上角相对于视口的纵坐标 height // 元素高度 width // 元素宽度 left // 元素左上角相对于视口的横坐标,与x属性相等 right // 元素右边界相对于视口的横坐标(等于x + width) top // 元素顶部相对于视口的纵坐标,与y属性相等 bottom // 元素底部相对于视口的纵坐标(等于y + height)
都把边框(border属性)算做元素的一部分。继承
也就是说,都是从边框外缘的各个点来计算。
所以,width和height包括了元素自己 + padding + border
var el = document.getElementById('mydiv'); el.remove();
将 el 节点从 DOM 树里面移除
document.getElementById('my-span').focus(); function getFocus() { document.getElementById('btn').focus({preventScroll:false}); // 让 元素 得到焦点,并滚动到可见区域。 }btn