兼容FireFox/IE的insertAdjacentHTML方法【Ext2学习总结】

今日研读大名鼎鼎的Ext框架源码,开始以为他们的代码一定超复杂难懂,但读了一点才发现,代码写的非常清晰易懂,设计严谨巧妙,确实一帮牛人之作。
废话不多说,说说今日收获:今日读到insertHtml部分发现这个方法其实是实现了兼容FF的insertAdjacentHTML方法,仔细看看感觉挺不错,于是提取出来,便于今后使用。

方法名称: insertHtml(where,el,html)

参数介绍:
where:插入位置。包括beforeBegin,beforeEnd,afterBegin,afterEnd。
el:用于参照插入位置的html元素对象
html:要插入的html代码

源码如下:
< script type = " text/javascript " >
  
<!--
    
function  insertHtml(where, el, html){
        where 
=  where.toLowerCase();
        
if (el.insertAdjacentHTML){
            
switch (where){
                
case   " beforebegin " :
                    el.insertAdjacentHTML('BeforeBegin', html);
                    
return  el.previousSibling;
                
case   " afterbegin " :
                    el.insertAdjacentHTML('AfterBegin', html);
                    
return  el.firstChild;
                
case   " beforeend " :
                    el.insertAdjacentHTML('BeforeEnd', html);
                    
return  el.lastChild;
                
case   " afterend " :
                    el.insertAdjacentHTML('AfterEnd', html);
                    
return  el.nextSibling;
            }
            
throw  'Illegal insertion point  ->   " ' + where + ' " ';
        }
  
var  range  =  el.ownerDocument.createRange();
        
var  frag;
        
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);
                    
return  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);
                    
return  el.lastChild;
                }
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;
            }
            
throw  'Illegal insertion point  ->   " ' + where + ' " ';
    }
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值