常用函数:

 

createElement 创建元素(不会立即显示,必须绑定到某个父节点上)

 

createTextNode 创建文本节点(不会立即显示,必须绑定到某个父节点上)

 

insertBefore 将一个元素插入到父节点下的某个元素之前(插入后浏览器即时渲染)

 

appendChild 将一个元素添加到父节点下的最后位置(插入后浏览器即时渲染)

 

removeChild 从父节点中删除一个节点(删除后浏览器即时渲染)

 

 

以下为《精通JavaScript》中提供的函数

 

JavaScript DOM笔记:修改DOM_字符串JavaScript DOM笔记:修改DOM_父节点_02function checkElem(elem) JavaScript DOM笔记:修改DOM_html_03{
JavaScript DOM笔记:修改DOM_字符串_04    
//如果只提供字符串,则把它转化为文档节点
JavaScript DOM笔记:修改DOM_字符串_04
    return elem && elem.constructor == String ? document.createTextNode(elem) : elem;
JavaScript DOM笔记:修改DOM_数组_06}
;
JavaScript DOM笔记:修改DOM_父节点_07
JavaScript DOM笔记:修改DOM_字符串JavaScript DOM笔记:修改DOM_父节点_02
function append(parent, elem) JavaScript DOM笔记:修改DOM_html_03{
JavaScript DOM笔记:修改DOM_字符串_04    parent.appendChild(checkElem(elem));
JavaScript DOM笔记:修改DOM_数组_06}
;
JavaScript DOM笔记:修改DOM_父节点_07
JavaScript DOM笔记:修改DOM_字符串JavaScript DOM笔记:修改DOM_父节点_02
function before(parent, before, elem) JavaScript DOM笔记:修改DOM_html_03{
JavaScript DOM笔记:修改DOM_字符串_04    
//如果只传入了两个参数,那么需要获取第一个参数的父节点以使用inserBefore函数
JavaScript DOM笔记:修改DOM_i++_18JavaScript DOM笔记:修改DOM_字符串_19
    if(elem == nullJavaScript DOM笔记:修改DOM_html_03{
JavaScript DOM笔记:修改DOM_字符串_04        elem 
= before;
JavaScript DOM笔记:修改DOM_字符串_04        before 
= parent;
JavaScript DOM笔记:修改DOM_字符串_04        parent 
= before.parentNode;
JavaScript DOM笔记:修改DOM_html_24    }

JavaScript DOM笔记:修改DOM_字符串_04    parent.insertBefore(checkElem(elem), before);
JavaScript DOM笔记:修改DOM_数组_06}
;

 

elem && elem.constructor == String …… 这里的运算顺序是 elem && ( elem.constructor == String ) ……

 

另外,直接从innerHTML插入具有更高的效率,但是XML不支持innerHTML属性。

 

如果要传入的elem参数是一个DOM节点和HTML字符串的混合数组,改进函数如下:

 

JavaScript DOM笔记:修改DOM_字符串JavaScript DOM笔记:修改DOM_父节点_02function checkElem(a) JavaScript DOM笔记:修改DOM_html_03{
JavaScript DOM笔记:修改DOM_字符串_04    
var r = [];
JavaScript DOM笔记:修改DOM_字符串_04    
//如果参数不是数组,强行转换
JavaScript DOM笔记:修改DOM_字符串_04
    if (a.constructor != Array)
JavaScript DOM笔记:修改DOM_字符串_04        a 
= [a];
JavaScript DOM笔记:修改DOM_i++_18JavaScript DOM笔记:修改DOM_字符串_19    
for (var i = 0; i < a.length; i++JavaScript DOM笔记:修改DOM_html_03{
JavaScript DOM笔记:修改DOM_i++_18JavaScript DOM笔记:修改DOM_字符串_19        
if (a[i].constructor == String) JavaScript DOM笔记:修改DOM_html_03{
JavaScript DOM笔记:修改DOM_字符串_04            
//用一个临时变量存放HTML
JavaScript DOM笔记:修改DOM_字符串_04
            var div = document.createElement("div");
JavaScript DOM笔记:修改DOM_字符串_04            
//注入HTML,转换成DOM结构
JavaScript DOM笔记:修改DOM_字符串_04
            div.innerHTML = a[i];
JavaScript DOM笔记:修改DOM_字符串_04            
//提取DOM结构到临时div中
JavaScript DOM笔记:修改DOM_字符串_04
            for (var j = 0; j < div.childNodes.length; j++
JavaScript DOM笔记:修改DOM_字符串_04                r[r.length] 
= div.childNodes[j];
JavaScript DOM笔记:修改DOM_html_24        }

JavaScript DOM笔记:修改DOM_i++_18JavaScript DOM笔记:修改DOM_字符串_19        
else if (a[i].length) JavaScript DOM笔记:修改DOM_html_03{
JavaScript DOM笔记:修改DOM_字符串_04            
// 假定是DOM节点数组
JavaScript DOM笔记:修改DOM_字符串_04
            for (var j = 0; j < a[i].length; j++)
JavaScript DOM笔记:修改DOM_字符串_04                r[r.length] 
= a[i][j];
JavaScript DOM笔记:修改DOM_html_24        }

JavaScript DOM笔记:修改DOM_i++_18JavaScript DOM笔记:修改DOM_字符串_19        
else JavaScript DOM笔记:修改DOM_html_03{
JavaScript DOM笔记:修改DOM_字符串_04            
//否则假定是DOM节点
JavaScript DOM笔记:修改DOM_字符串_04
            r[r.length] = a[i];
JavaScript DOM笔记:修改DOM_html_24        }

JavaScript DOM笔记:修改DOM_html_24    }

JavaScript DOM笔记:修改DOM_字符串_04    
return r;
JavaScript DOM笔记:修改DOM_数组_06}
;
JavaScript DOM笔记:修改DOM_父节点_07
JavaScript DOM笔记:修改DOM_字符串JavaScript DOM笔记:修改DOM_父节点_02
function before(parent, before, elem) JavaScript DOM笔记:修改DOM_html_03{
JavaScript DOM笔记:修改DOM_字符串_04    
//检查是否提供parent节点参数
JavaScript DOM笔记:修改DOM_i++_18JavaScript DOM笔记:修改DOM_字符串_19
    if (elem == nullJavaScript DOM笔记:修改DOM_html_03{
JavaScript DOM笔记:修改DOM_字符串_04        elem 
= before;
JavaScript DOM笔记:修改DOM_字符串_04        before 
= parent;
JavaScript DOM笔记:修改DOM_字符串_04        parent 
= before.parent;
JavaScript DOM笔记:修改DOM_html_24    }

JavaScript DOM笔记:修改DOM_字符串_04    
JavaScript DOM笔记:修改DOM_字符串_04    
//获取元素的新数组
JavaScript DOM笔记:修改DOM_字符串_04
    var elems = checkElem(elem);
JavaScript DOM笔记:修改DOM_字符串_04    
JavaScript DOM笔记:修改DOM_字符串_04    
//向后遍历数组,因为我们向前插入元素
JavaScript DOM笔记:修改DOM_i++_18JavaScript DOM笔记:修改DOM_字符串_19
    for (var i = elems.length - 1; i >= 0; i--JavaScript DOM笔记:修改DOM_html_03{
JavaScript DOM笔记:修改DOM_字符串_04        parent.insertBefore(elems[i], before);        
JavaScript DOM笔记:修改DOM_html_24    }

JavaScript DOM笔记:修改DOM_数组_06}
;
JavaScript DOM笔记:修改DOM_父节点_07
JavaScript DOM笔记:修改DOM_字符串JavaScript DOM笔记:修改DOM_父节点_02
function append(parent, elem) JavaScript DOM笔记:修改DOM_html_03{
JavaScript DOM笔记:修改DOM_字符串_04    
var elems = checkElem(elem);
JavaScript DOM笔记:修改DOM_i++_18JavaScript DOM笔记:修改DOM_字符串_19    
for (var i = 0; i < elems.length; i++JavaScript DOM笔记:修改DOM_html_03{
JavaScript DOM笔记:修改DOM_字符串_04        parent.appendChild(elems[i]);
JavaScript DOM笔记:修改DOM_html_24    }

JavaScript DOM笔记:修改DOM_数组_06}
;

 

 最后再补充两个函数:

 

function remove(elem) {
    
if (elem) 
        elem.parentNode.removeChild(elem);
}

function empty(elem) {
    
while(elem.firstChild)
        remove(elem.firstChild);
}