JavaScript DOM笔记:修改DOM






常用函数:



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



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



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



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



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





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



function checkElem(elem) {
    //如果只提供字符串,则把它转化为文档节点
    return elem && elem.constructor == String ? document.createTextNode(elem) : elem;
};

function append(parent, elem) {
    parent.appendChild(checkElem(elem));
};

function before(parent, before, elem) {
    //如果只传入了两个参数,那么需要获取第一个参数的父节点以使用inserBefore函数
    if(elem == null) {
        elem = before;
        before = parent;
        parent = before.parentNode;
    }
    parent.insertBefore(checkElem(elem), before);
};


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



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



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



function checkElem(a) {
    var r = [];
    //如果参数不是数组,强行转换
    if (a.constructor != Array)
        a = [a];
    for (var i = 0; i < a.length; i++) {
        if (a[i].constructor == String) {
            //用一个临时变量存放HTML
            var div = document.createElement("div");
            //注入HTML,转换成DOM结构
            div.innerHTML = a[i];
            //提取DOM结构到临时div中
            for (var j = 0; j < div.childNodes.length; j++)
                r[r.length] = div.childNodes[j];
        }
        else if (a[i].length) {
            // 假定是DOM节点数组
            for (var j = 0; j < a[i].length; j++)
                r[r.length] = a[i][j];
        }
        else {
            //否则假定是DOM节点
            r[r.length] = a[i];
        }
    }
    return r;
};

function before(parent, before, elem) {
    //检查是否提供parent节点参数
    if (elem == null) {
        elem = before;
        before = parent;
        parent = before.parent;
    }
   
    //获取元素的新数组
    var elems = checkElem(elem);
   
    //向后遍历数组,因为我们向前插入元素
    for (var i = elems.length - 1; i >= 0; i--) {
        parent.insertBefore(elems[i], before);       
    }
};

function append(parent, elem) {
    var elems = checkElem(elem);
    for (var i = 0; i < elems.length; i++) {
        parent.appendChild(elems[i]);
    }
};


最后再补充两个函数:



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

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

http://www.cnblogs.com/zhengchuyu/archive/2008/07/23/1249951.html

转载于:https://my.oschina.net/darkness/blog/510211

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值