javascript DOM操作中的insertAdjacentHTML方法 – WEB前端開(kāi)發(fā)

我是創(chuàng)始人李巖:很抱歉!給自己產(chǎn)品做個(gè)廣告,點(diǎn)擊進(jìn)來(lái)看看。  

插入HTML內(nèi)容與文本內(nèi)容以前用的是innerHTML與innerText方法,今天微博上看到《JavaScript insertAdjacentHTML?and?beforeend》這篇文章,重新勾起對(duì)insertAdjacentHTML和 insertAdjacentText方法回憶,以前網(wǎng)上有個(gè)比較靠譜的兼容方法:

/**
 * @param {HTMLElement} el
 * @param {String} where beforeBegin、afterBegin、beforeEnd、afterEnd
 * @param {String} html
 */
function insertHTML(el, where, html) {
	if (!el) {
		return false;
	}
	
	where = where.toLowerCase();
	
	if (el.insertAdjacentHTML) {//IE
		el.insertAdjacentHTML(where, html);
	} else {
		var range = el.ownerDocument.createRange(),
			frag = null;
		
		switch (where) {
			case "beforebegin":
				range.setStartBefore(el);
				frag = range.createContextualFragment(html);
				el.parentNode.insertBefore(frag, el);
				return el.previousSibling;
			case "afterbegin":
				if (el.firstChild) {
					range.setStartBefore(el.firstChild);
					frag = range.createContextualFragment(html);
					el.insertBefore(frag, el.firstChild);
				} else {
					el.innerHTML = html;
				}
				return el.firstChild;
			case "beforeend":
				if (el.lastChild) {
					range.setStartAfter(el.lastChild);
					frag = range.createContextualFragment(html);
					el.appendChild(frag);
				} else {
					el.innerHTML = html;
				}
				return el.lastChild;
			case "afterend":
				range.setStartAfter(el);
				frag = range.createContextualFragment(html);
				el.parentNode.insertBefore(frag, el.nextSibling);
				return el.nextSibling;
		}
	}
}

在還沒(méi)開(kāi)始用jQuery之前,一直用這個(gè)方法。當(dāng)然后來(lái)用了jQuery的.append().appendTo().html().prepend().prependTo().text().after().before().insertAfter().insertBefore()也很方便。

insertAdjacentHTML和 insertAdjacentText這兩個(gè)方法很靈活,可以在指定的地方插入html內(nèi)容和文本內(nèi)容,在大部分情況下比element.innerHTML的性能更好,比Document Fragments更好的HTML文檔插入方案,因?yàn)槲覀冎繢ocument Fragments在某些IE版本中的表現(xiàn)不好。
insertAdjacentText方法與 insertAdjacentHTML方法類似,只不過(guò)只能插入純文本,參數(shù)相同。

MDN上查了一下兼容性:http://www.css88.com/archives/https://developer.mozilla.org/en-US/docs/Web/API/element.insertAdjacentHTML

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 1.0 8.0 (8.0) 4.0 7.0 4.0 (527)

接口也很簡(jiǎn)單:

element.insertAdjacentHTML(position, text);

需要傳入字符串參數(shù)position,以及字符串參數(shù)html代碼。我們可以對(duì)照jQuery的HTML插入方法。
參數(shù)position 的取值:

  • beforeBegin:在該元素前插入
  • afterBegin:在該元素第一個(gè)子元素前插入
  • beforeEnd:在該元素最后一個(gè)子元素后面插入
  • afterEnd:在該元素后插入

方法同意支持空元素,和innerHTML與innerText方法沒(méi)什么區(qū)別了。

性能測(cè)試可以看這里:http://jsperf.com/innerhtml-vs-insertadjacenthtml-vs-dom/8

本文被轉(zhuǎn)載1次

首發(fā)媒體 Web前端開(kāi)發(fā) | 轉(zhuǎn)發(fā)媒體

隨意打賞

提交建議
微信掃一掃,分享給好友吧。
91精品一区国产高清在线| 1卡二卡三卡四卡精品| 国产 精品 自在 线| 国产在线精品一区二区夜色| 真实国产精品vr专区| 久久91精品国产99久久yfo| 国产伦精品一区二区三区无广告 | 日韩国产成人精品视频| jizz国产精品网站| 亚洲国产精品无码久久久秋霞1| 国产99视频精品免费专区| 亚洲国产精品激情在线观看| 99久久国产综合精品五月天| 国产精品色内内在线播放| 国产精品免费大片一区二区| 精品日韩一区二区| 国产精品臀控福利在线观看| 亚洲av永久无码精品漫画| 国产麻豆精品入口在线观看 | 久久伊人精品一区二区三区| 国产极品白嫩精品| 西瓜精品国产自在现线| 久久精品国产72国产精| 久久精品蜜芽亚洲国产AV| 国产乱人伦偷精品视频免下载| 日韩精品一区二区三区视频| 国模精品视频一区二区三区| 国产a视频精品免费观看| 亚洲国产精品自在在线观看| 尹人久久久香蕉精品| 国产成人精品怡红院在线观看| 国产精品高清久久久久久久| 亚洲av日韩精品久久久久久a| 久久久无码精品亚洲日韩京东传媒 | 国产69久久精品成人看| 久久久一本精品99久久精品36 | 久久99国产精品久久99果冻传媒| 七次郎在线视频观看精品| 国产成人久久精品| 国产精品成人va在线观看入口| 久9视频这里只有精品8|