久草视频2-久草视-久草社区视频-久草色在线-久草色视频-久草软件

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

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

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

/**
 * @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;
		}
	}
}

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

insertAdjacentHTML和 insertAdjacentText這兩個方法很靈活,可以在指定的地方插入html內(nèi)容和文本內(nèi)容,在大部分情況下比element.innerHTML的性能更好,比Document Fragments更好的HTML文檔插入方案,因為我們知道Document Fragments在某些IE版本中的表現(xiàn)不好。
insertAdjacentText方法與 insertAdjacentHTML方法類似,只不過只能插入純文本,參數(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)

接口也很簡單:

element.insertAdjacentHTML(position, text);

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

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

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

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

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

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

隨意打賞

提交建議
微信掃一掃,分享給好友吧。
主站蜘蛛池模板: 亚洲干综合 | 亚洲精品一线二线三线 | 日本激情网 | 精品国产品香蕉在线观看 | 性德国高清xxxxbbbb | 欧美日韩久久中文字幕 | 四虎精品影视 | 脱了白丝校花的内裤猛烈进入 | 操碰91| 国产亚洲精品一区久久 | 欧美日韩亚洲第一区在线 | 国产欧美一区二区三区精品 | 精品国产免费第一区二区 | 国产玖玖在线观看 | 人人爽人人香蕉 | 日本老妇人乱视频 | 日本国产最新一区二区三区 | 暖暖 免费 高清 日本 中文 | 性柔术xxxhd| 99欧美精品| 天天干天天日天天射天天操毛片 | 美女翘臀跪床被打屁股作文 | 四虎一影院区永久精品 | 四虎影音| 亚洲婷婷在线视频 | 亚洲成人99 | 黄瓜视频黄 | 4455在线| 日本人成动漫网站在线观看 | 3d动漫h在线观看网站蜜芽 | 日韩欧美亚洲每日更新网 | 久草大| 色伦网| 欧美日韩一区二区三在线 | 天天干天天日天天射天天操毛片 | 日本高清免费中文字幕不卡 | 亚洲精品动漫在线观看 | 奇米777狠狠 | 国产精品青青青高清在线 | 国产精视频 | 我的好妈妈7中字在线观看韩国 |