兼容浏览器的insertAdjacentHTML

添加HTML内容与文本内容以前用的是innerHTML与innerText方法,

最近发现还有insertAdjacentHTML和 insertAdjacentText方法,

这两个方法更灵活,可以在指定的地方插入html内容和文本内容。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

参数资料:

msdn.microsoft.com/en-us/library/ms536452(VS.85).aspx

www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/ranges.html#Level2-Range-setStartBefore

https://developer.mozilla.org/en/DOM/range.createContextualFragment

www.never-online.net/blog/article.asp?id=113

首先是IE里有 insertAdjacentHTML,而且很好用。为了兼容其它浏览器就有了如下的函数“insertHTML”

重点:

1、为了兼容其它浏览器,支持beforeBegin、afterBegin、beforeEnd、afterEnd

2、如何将字符串String转换为文档碎片(fragment)或是Dom树(Dom tree),因为使用innerHTML无法指定位置。

将字符串转换为Dom tree,参数这里:range.createContextualFragment,contextual翻译过来好像是“语境”的意思??

range的起始位置的设置,参数setStartBeforesetStartAfter

下面就是完整的代码了(IE中可根据需要是否返回附加的dom):

完整的代码示例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
 <head>
  <title>兼容浏览器的insertAdjacentHTML</title>
  <meta name="generator" content="editplus" />
  <meta name="author" content="" />
  <meta name="keywords" content="" />
  <meta name="description" content="" />
  <meta http-equiv=‘content-type‘ content=‘text/htm;charset=utf-8‘ />
 <style type="text/css">
* {margin:0; padding:0;}
body {background-color:#fff}
dl, dd {margin:20px;}
 
.color_1 {color:#F7941D; border:1px solid #F7941D;}
.color_2 {color:#f00; border:1px solid #f00;}
.color_3 {color:#01FE34; border:1px solid #01FE34;}
.color_4 {color:#F49AC1; border:1px solid #F49AC1;}
.color_5 {color:#00AEEF; border:1px solid #00AEEF;}
.color_6 {color:#DB00EF; border:1px solid #DB00EF;}
.color_7 {color:#00CCFD; border:1px solid #00CCFD;}
</style>
 </head>
 
 <body>
 <script type=‘text/javascript‘>
 /**
 *
 *
 * @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;
        }
    }
}
 
function btnHandler() {
    var elem = document.getElementById(‘abc‘);
     
    insertHTML(elem, ‘beforeBegin‘, ‘<dd class="color_2">上一个兄弟节点previousSibling</dd>‘);
    insertHTML(elem, ‘beforeEnd‘, ‘<dd class="color_3">最后一个节点lastChild</dd>‘);
    insertHTML(elem, ‘afterBegin‘, ‘<dd class="color_4">第一个节点firstChild</dd>‘);
    insertHTML(elem, ‘afterEnd‘, ‘<dd class="color_5">下一个兄弟节点nextSibling</dd>‘);
}
</script>
<button onclick="btnHandler();">insertAdjacentHTML</button>
<dl class="color_1" id="abc">
    <dd><a href="#">今天采访出来,天上下雨,那个偏僻的地方根本没出租车的影子</a></dd>
    <dd><a href="#">今天采访出来,天上下雨,那个偏僻的地方根本没出租车的影子</a></dd>
    <dd><a href="#">今天采访出来,天上下雨,那个偏僻的地方根本没出租车的影子</a></dd>
    <dd><a href="#">今天采访出来,天上下雨,那个偏僻的地方根本没出租车的影子</a></dd>
    <dd><a href="#">今天采访出来,天上下雨,那个偏僻的地方根本没出租车的影子</a></dd>  
</dl>
 </body>
</html>

<转载自:http://www.cnblogs.com/meteoric_cry/archive/2010/10/14/1851093.html>

时间: 2024-11-12 11:15:45

兼容浏览器的insertAdjacentHTML的相关文章

兼容浏览器 回车键 keydown事件

$("body").keydown(function(event){ if(event.keyCode==13){ //body } }); 重点:$("body"),        使用$(window),IE浏览器有问题 兼容浏览器 回车键 keydown事件,布布扣,bubuko.com

构建兼容浏览器的Angularjs web应用

背景 随着mvvm逐渐成熟,现在使用jQuery构建web应用已经显得过时了,而且使用jQuery需要编写更多的代码去控制dom的取值.赋值.绑定事件等,而mvv从底层实现了对以上操作的支持,让程序员可以从原始的复杂.重复的编码中解放出来,让程序员可以将更多的重心放在业务的实现.数据的交互上去,而且大大减少了程序员需要编写的代码量. 多年来的web经验告诉我们,编写web应用最难的地方主要在于浏览器的兼容问题,而且更多的兼容问题主要体现在ie上,因此只要能解决ie上的问题,那么这个web应用的其

jQuery兼容浏览器IE8方法

1.前言 在做前端开发的时候,公司的规范要求面向客户的兼容到IE8,但是在IE8模式下经常会发现各种错误,某某方法未定义.不支持某属性或对象等,使用jQuery的时候,jQuery从2.0开始不兼容IE8,最低支持IE9,所以需要引入更低的jQuery版本来兼容. 2.IE8不支持jQuery版本解决办法 通过判断IE浏览器的版本来加载对应版本的jQuery 使用语句<!--[if IE 8]> 仅IE8可识别 <![endif]--> 可在IE8模式下进行一些兼容操作.代码如下:

ES6语法兼容浏览器(主要是IE)

1.浏览器兼容ES6基础语法(包括箭头函数):在引入其它脚本之前引入browser.min.js,然后script的type属性改成text/babel: 2.使IE浏览器兼容ES6语法(Promise等语法):引入polyfill.min.js <script type="text/javascript" src = "https://cdn.polyfill.io/v2/polyfill.min.js?features=es6"></scrip

hack兼容浏览器

二.CSS HACK的方法首先需要知道的是:所有浏览器 通用 height:100px; IE6 专用 _height: 100px; IE7 专用 *+height: 100px; IE6.IE7 共用 *height:100px; IE7.FF 共用 height: 100px!important;

用于兼容浏览器的js写法

用于引用的源文件代码: var Common = { getEvent: function() {//ie/ff if (document.all) { return window.event; } func = getEvent.caller; while (func != null) { var arg0 = func.arguments[0]; if (arg0) { if ((arg0.constructor == Event || arg0.constructor == MouseEv

js 完美兼容浏览器的复制功能

1,js结合swf的复制功能,完美兼容火狐,谷歌,360,ie8,使用示例:(ps:引入copy.swf比较重要,文件传送门 解压密码:http://www.bieanju.com/,为了防止360删除文件请解压后去除后缀的1) function copyText(){        var clip = new ZeroClipboard.Client();         clip.setHandCursor(true);                //var text= documen

简单封装事件处理程序,兼容浏览器

var EventUtill = { addEvent:function(ele,fnName,FN){ if(ele.addEventListener) { ele.addEventListener(fnName,FN,false); } else if(ele.attachEvent) { ele.attachEvent("on"+fnName,function(){ FN.apply(ele,arguments); }) } else{ ele["on"+fn

文字多行缩进 css 兼容浏览器

overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; display: -moz-box; -moz-line-clamp: 3; -moz-box-orient: vertical;