国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

javascript 包裹節(jié)點(diǎn) 提高效率

2024-05-06 14:11:22
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
原理基本是這樣,如果傳入的是字符串,那么讓它們變成一個(gè)元素節(jié)點(diǎn),不過(guò)這元素節(jié)點(diǎn)也可以有許多層,在最內(nèi)層把要包裹的元素放進(jìn)。把字符串變成元素節(jié)點(diǎn)的方法有如下幾個(gè)。
1,createElement,IE可以連元素屬性也一起創(chuàng)建,但只能創(chuàng)建一層。
2,innerHTML,不過(guò)需要對(duì)原來(lái)的字符串進(jìn)行處理,IE與FF都有許多意想不到的默認(rèn)行為,可以為你多加一點(diǎn)東西或少加一點(diǎn)東西。
3,createContextualFragment,由于Opera的行為有點(diǎn)怪異,需要選中修改元素的位置。經(jīng)日本人的測(cè)試,它轉(zhuǎn)換字符串成節(jié)點(diǎn)的效率比innerHTML高多了,也安全多了,真是強(qiáng)者愈強(qiáng),弱者愈弱。如果是傳入元素節(jié)點(diǎn),需要克隆一下,要不都變成wrapAll。如果是函數(shù),把當(dāng)前元素傳進(jìn)去,利用它的某些屬性創(chuàng)建一個(gè)包裹元素。
最初的實(shí)驗(yàn)品(這里的wrapOuter相當(dāng)于jQuery的wrap):
代碼如下:
var parseHTML = function(str) {
if(document.createRange){
var range = document.createRange()
range.setStartAfter(document.body)
return range.createContextualFragment(str)
}else{
return document.createElement(str)
}
}
var wrapOuter = function(target,html){
var wrap = parseHTML(html) ;
target.parentNode.insertBefore(wrap,target);
target.previousSibling.appendChild(target)
}


[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]

發(fā)現(xiàn)在Opera中出了些問(wèn)題,range.setStartAfter(document.body)要改成我們的目標(biāo)元素才行。再者,將插入包裹元素的方式由insertBefore改為replaceChild,提高效率。
代碼如下:
var wrapOuter = function(target,html){
var wrap = html
if(Object.prototype.toString.call(html) === "[object String]"){
if(document.createRange){
var range=document.createRange();
range.selectNodeContents(target);
wrap = range.createContextualFragment(html).firstChild;
}else {
wrap = document.createElement(str);
}
}
target.parentNode.replaceChild(wrap,target);
wrap.appendChild(target)
}

圖片精選

主站蜘蛛池模板: 阿坝县| 黔江区| 新闻| 封丘县| 醴陵市| 丹寨县| 新和县| 涪陵区| 喀喇沁旗| 长汀县| 怀柔区| 朝阳区| 宣汉县| 上饶市| 遵义市| 共和县| 丰原市| 抚顺市| 内乡县| 兴文县| 永修县| 夏邑县| 阜城县| 逊克县| 靖江市| 琼中| 盖州市| 德昌县| 建平县| 锦屏县| 开鲁县| 汉中市| 宜黄县| 宜州市| 达孜县| 兴仁县| 阳春市| 仙桃市| 鄢陵县| 西乌珠穆沁旗| 屏东县|