所有的 HTML 元素都是 HTMLElement 类型或者其子类的实例, HTMLElement 又是 Element 或者 EntityReference ,在继承 Element 类型时又添加一些新属性。
document.getElementById(ID);
参数 id 为文档中的元素对应的 id 属性值。如果文档中不存在指定元素,则返回 null 。该方法只适用于 Document 。
// <div id="box">盒子</div>
var box = document.getElementById('box');
var info = 'nodeName: ' + box.nodeName;
info += '\rnodeType: ' + box.nodeType;
info += '\rparentNode: ' + box.parentElement.nodeName;
info += '\rchildNode: ' + box.childNodes[0].nodeName;
alert(info);
document.getElementsByTagName(tagName);
使用 parentNode 、 nextSibling 、 previousSibling 、 firstChild 、 lastChild 属性可以遍历文档树中每一个元素
function first(e) {
var e = e.firstChid;
while (e && e.nodeType != 1) {
e = nextSibling;
}
return e;
}
function last(e) {
var e = e.lastChild;
while (e && e.nodeType != 1) {
e = e.previousSibling;
}
return e;
}
function parent(e, n) {
var n = n || 1;
for (var i = 0; i < n; i++) {
if (e.nodeType == 9) break;
if (e != null) e = e.parentNode;
}
return e;
}
function pre(e) {
var e = e.previousSibling;
while (e && e.nodeType != 1) {
e = e.previousSibling;
}
return e;
}
function next(e) {
var e = e.nextSibling;
while (e && e.nodeType != 1) {
e = e.nextSibling;
}
return e;
}
对于元素间的空格, IE 9 及以前的版本不会返回文本节点,而其它的浏览器都会返回文本节点。则有了下面几个属性:
createElement()
能够根据参数添加指定的标签名创建一个新的元素,并返回这个元素的引用。
var element = document.createElement('tagName');
cloneNode() 可以复制指定节点。 cloneNode() 会复制原元素的一切,包括 id ,然而,一个文档只能有一个 id ,所以就需要改一个。
当创建大量相同的节点时,使用节点克隆更有效率。
function tableClonedDOM() {
var i,
table,
thead,
tbody,
tr,
th,
td,
a,
ul,
li,
oth = document.createElement('th'),
otd = document.createElement('td'),
otr = document.createElement('li'),
oul = document.createElement('ul');
tbody = document.createElement('tbody');
for (var i = 0; i <= 1000; i++) {
tr = ort.cloneNode(false);
td = otd.cloneNode(false);
td.appendChild(document.createTextNode(i % 2 ? 'yes' : 'no'));
tr.appendChild(td);
td = otd.cloneNode(false);
td.appendChild(document.createTextNode(i));
tr.appendChild(td);
td = otd.cloneNode(false);
td.appendChild(document.createTextNode('my name is # ' + i));
tr.appendChild(td);
// ...
}
// ....
}
将元素添加到文档树之后,浏览器会直接呈现该元素,之后对该元素做的任何修改都会直接在浏览器中显示。
insertBefore(newChild, refChild);
nodeObject.removeChild(node);
封装移除节点函数
function remove(e) {
if (e) {
var _e = e.parentNode.removeChild(e);
return _e;
}
return undefined;
}
移除某节点下所有节点
function empty(e) {
while (e.firstChild) {
e.removeChild(e.firstChild);
}
}
nodeObject.replaceChild(new_note, old_node);
参数 new_node 为指定新的节点, old_node 是被替换的旧节点。如果替换成功,则返回被替换的节点,若不成功则返回 null 。
// <div id="box1">盒子1
// <div id="box2">盒子2</div>
// <div id="box3">盒子3</div>
// </div>
// <div id="box4">盒子4
// <div id="box5">盒子5</div>
// </div>
// </div>
var box1,
box2,
box3,
box4,
array = [];
for (var i = 0; i < 5; i++) {
array[i] = document.getElementById('box' + (i + 1));
}
var a = array[0].removeChild(array[1]);
alert(a.innerText);
var b = array[3].replaceChild(a, array[4]);
alert(b.innerText);
在文档中查询哪个元素获得了焦点,以及确认文档是否获得了焦点,对提升 Web 应用的无障碍性非常重要。
HTML 5 新增了 document.activeElement 属性可以引用 DOM 中当前获得焦点的元素。元素获取焦点的方式包括:页面载入、用户输入、在脚本调入 focus() 方法。
在默认情况下,文档刚加载完成时, document.activeElement 引用的是 document.body 元素,文档加载期间, document.activeElement 的值为 null 。
contains() 是 IE 私有的方法,用来检测某个节点是不是另一个节点的子代。该方法接受一个参数,指定检测的后代节点。
DOM Level 3 定义了 compareDocumentPosition() 方法,该方法也能够确定节点间的关系。用法与 contains() 相同,但是返回值不同。
compareDocumentPosition() 方法返回一个整数,用来描述两个节点在文档中的位置。
function contains(refNode, otherNode) {
if (
typeof refNode.contains === 'function' &&
(!client.engine.webkit || client.engine.webkit >= 522)
) {
return refNode.contains(otherNode);
} else if (typeof refNode.compareDocumentPosition === 'function') {
return !!(refNOde.compareDocumentPosition(otherNode) & 16);
} else {
var node = otherNode.parentNode;
do {
if (node == refNode) {
return true;
} else {
node = node.parentNode;
}
} while (node !== null);
return false;
}
}