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

首頁 > 編程 > HTML > 正文

跨瀏覽器的設(shè)置innerHTML方法

2024-08-26 00:08:42
字體:
供稿:網(wǎng)友

From:http://www.ajaxwing.com/index.php?c=DOM
Author:kenxu

很多人都可能遇到過這種情況:設(shè)置 innerHTML 的時(shí)候,插入的 HTML 代碼中包含腳本,但這些腳本卻不生效,或者在 IE 上生效在其它瀏覽器上就不生效。原因很簡單:不同瀏覽器對插入 innerHTML 中的腳本有不同的處理方法。經(jīng)過實(shí)踐,歸納如下:
對于IE,首先 script 標(biāo)簽必須帶 defer 屬性,其次在插入時(shí)刻,innerHTML 的所屬節(jié)點(diǎn)必須在 DOM 樹中;對于 Firefox 和 Opera,在插入時(shí)刻,innerHTML 的所屬節(jié)點(diǎn)不可以在 DOM 樹中。
根據(jù)上面結(jié)論,給出通用的設(shè)置 innerHTML 方法:

/*
 * 描述:跨瀏覽器的設(shè)置 innerHTML 方法
 * 允許插入的 HTML 代碼中包含 script 和 style
 * 作者:kenxu <ken@ajaxwing.com>
 * 日期:2006-03-23
 * 參數(shù):
 * el: 合法的 DOM 樹中的節(jié)點(diǎn)
 * htmlCode: 合法的 HTML 代碼
 * 經(jīng)測試的瀏覽器:ie5+, firefox1.5+, opera8.5+
 */
var setInnerHTML = function (el, htmlCode) {
 var ua = navigator.userAgent.toLowerCase();
 if (ua.indexOf('msie') >= 0 && ua.indexOf('opera') < 0) {
 htmlCode = '<div style="display:none">for IE</div>' + htmlCode;
 htmlCode = htmlCode.replace(/<script([^>]*)>/gi,
 '<script$1 defer="true">');
 el.innerHTML = htmlCode;
 el.removeChild(el.firstChild);
 }
 else {
 var el_next = el.nextSibling;
 var el_parent = el.parentNode;
 el_parent.removeChild(el);
 el.innerHTML = htmlCode;
 if (el_next) {
 el_parent.insertBefore(el, el_next)
 } else {
 el_parent.appendChild(el);
 }
 }
}
還有某些情況,我們事先不清楚要插入到 innerHTML 的 HTML 代碼包含什么,如果包含 document.write 語句,那么就會(huì)破壞整個(gè)頁面。對于這種情況,可以通過重新定義 document.write 來避免。代碼如下:
/*
 * 描述:通過重定義 document.write 函數(shù),避免在使用 setInnerHTML 時(shí),
 * 插入的 HTML 代碼中包含 document.write ,導(dǎo)致原頁面受到破壞的情況。
 */
document.write = function() {
 var body = document.getElementsByTagName('body')[0];
 for (var i = 0; i < arguments.length; i++) {
 argument = arguments[i];
 if (typeof argument == 'string') {
 var el = body.appendChild(document.createElement('div'));
 setInnerHTML(el, argument)
 }
 }
}
在這篇文章編寫之前,已經(jīng)有一個(gè)比較完善的解決方法《讓插入到 innerHTML 中的 script 跑起來》。比較起來,《讓》給出的方法考慮得更細(xì)致,但處理起來比較繁瑣,效率不高。而這里給出的方法則更簡單,并且充分利用了瀏覽器的特性。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 子长县| 黑水县| 桂林市| 将乐县| 西畴县| 瑞安市| 鄯善县| 南阳市| 和林格尔县| 中江县| 汤原县| 宜昌市| 宁陵县| 肥乡县| 栖霞市| 杨浦区| 祁连县| 漳州市| 稻城县| 冷水江市| 孟连| 扶绥县| 当阳市| 无极县| 赤壁市| 沾化县| 湟中县| 健康| 肥西县| 庆阳市| 成都市| 长海县| 临清市| 林甸县| 林西县| 察哈| 柳河县| 兴化市| 道孚县| 大方县| 前郭尔|