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