最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript Range對象跨瀏覽器常用操作

 更新時間:2009年10月08日 18:28:57   作者:  
最近在開發(fā)在線代碼編輯器的過程中頻繁接觸Range對象,由于跨瀏覽器的需求,使用到ie下TextRange對象和標(biāo)準(zhǔn)Dom Range對象。

2.插入文本
TextRange插入文本
使用TextRang插入文本比較簡單,直接調(diào)用pasteHTML()方法就可以直接插入html代碼。
Dom Range插入文本
使用Dom Range插入文本相對復(fù)雜一些,Dom Range對象使用insertNode()方法實現(xiàn)插入,但是insertNode是在Range的開始位置插入一 個節(jié)點,參數(shù)是一個節(jié)點而不是字符串,我們可以通過插入文本節(jié)點實現(xiàn),如果使用document.createTextNode建立文本節(jié)點,文本中的HTML標(biāo)記會自動轉(zhuǎn)換,但空格是個特例,并不會自動轉(zhuǎn)換為 ,這使我在開發(fā)代碼縮進時很頭疼,最后解決的辦法,是使用Rang.createContextualFragment,這個方法雖然在文檔中沒有找到,但測試多個瀏覽器都支持此方法,此方法返回的是一個DocumentFragment對
象。以下是示例代碼:
例3:
Js代碼
復(fù)制代碼 代碼如下:

var rg = window.getSelection().getRangeAt(0);
var fragment = rg.createContextualFragment(str);
rg.insertNode(fragment);

這段代碼雖然實現(xiàn)插入了文本,但是光標(biāo)位置卻在插入文本之前,因為“insertNode是在Range的開始位置插入一 個節(jié)點”,接下來我們實現(xiàn)光標(biāo)的控制,這需要設(shè)置Range對象的位置,并更新Selection對象的Range,代碼如下:
例4:
Js代碼
復(fù)制代碼 代碼如下:

var selection=window.getSelection();
var rg=selection.getRangeAt(0);
var fragment = rg.createContextualFragment(str);
var oLastNode = fragment.lastChild; //獲得DocumentFragment的末尾位置
rg.insertNode(fragment);
rg.setEndAfter(oLastNode);//設(shè)置末尾位置
rg.collapse(false);//合并范圍至末尾
selection.removeAllRanges();//清除range
selection.addRange(rg);//設(shè)置range

以下是一個代碼縮進功能的部分代碼作為示例:按tab鍵時會在當(dāng)前位置,插入4個空格,解決在編輯時不能輸入tab的問題。實際應(yīng)用中的功能包括多行縮進和自動縮進。
復(fù)制代碼 代碼如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
window.onload=function(){
var iframeContent="";
var divContent="";
var divChange=false;
var iframeChange=false;
var $=function(s){return document.getElementById(s);}
$("ifram_div").innerHTML+='<div id="infoIframe">iframe</div><iframe id="youretextarea" style="height:200px;width:99%;" class="_editbox"></iframe>';
var fw=$("youretextarea").contentWindow;
var f=fw.document;
f.designMode = 'On';
f.contentEditable = true;
f.open();
f.writeln('<html><style>p{margin:0px;padding:0px;}body{margin:0px;padding:0px;font:16/18px Arial;}</html>');
f.close();
if(f.attachEvent){
f.attachEvent("onkeydown",fun1);
}else{
fw.addEventListener("keydown",fun1,true);
}
function fun1(e){
ee=e||window.event;
var code=e.charCode||e.keyCode;
var strTab="&nbsp;&nbsp;&nbsp;&nbsp;";
if(code==9){//tab鍵
if(f.selection){//ie
e.returnValue=false;//取消瀏覽器默認(rèn)動作 ie
var rg=f.selection.createRange();
rg.pasteHTML(strTab);
}else{
e.preventDefault();//取消瀏覽器默認(rèn)動作
var selection=fw.getSelection();
var rg=selection.getRangeAt(0);
var fragment = rg.createContextualFragment(strTab);
var oLastNode = fragment.lastChild; //獲得DocumentFragment的末尾位置
rg.insertNode(fragment);
rg.setEndAfter(oLastNode);//設(shè)置末尾位置
rg.collapse(false);//合并范圍至末尾
selection.removeAllRanges();//清除range
selection.addRange(rg);//設(shè)置range
}
}
}
}
//-->
</SCRIPT>
<div id="ifram_div"></div>
</BODY>
</HTML>

3.替換
綜合介紹的選擇和插入的方法可完成替換功能,TextRange比較簡單pasteHTML方法會替換原來Range選中的文本,Dom Range的insertNode不會刪除原range選中內(nèi)容,需要調(diào)用deleteContents()方法先刪除選擇內(nèi)容。
以上介紹了使用Range對象常用的區(qū)域選擇、插入文本和替換操作,希望在大家開發(fā)在線編輯器時有所幫助,粗略之處還請見諒。

相關(guān)文章

  • 微信小程序網(wǎng)絡(luò)數(shù)據(jù)請求服務(wù)實現(xiàn)詳解

    微信小程序網(wǎng)絡(luò)數(shù)據(jù)請求服務(wù)實現(xiàn)詳解

    這篇文章主要介紹了微信小程序網(wǎng)絡(luò)數(shù)據(jù)請求服務(wù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-10-10
  • javascript實現(xiàn)無縫上下滾動特效

    javascript實現(xiàn)無縫上下滾動特效

    這篇文章主要介紹了javascript實現(xiàn)無縫上下滾動特效的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • JavaScript中string轉(zhuǎn)換成number介紹

    JavaScript中string轉(zhuǎn)換成number介紹

    這篇文章主要介紹了JavaScript中string轉(zhuǎn)換成number介紹,本文講解了3種將string值轉(zhuǎn)換成number的方法,需要的朋友可以參考下
    2014-12-12
  • 簡單的網(wǎng)頁廣告特效實例

    簡單的網(wǎng)頁廣告特效實例

    下面小編就為大家?guī)硪黄唵蔚木W(wǎng)頁廣告特效實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • js獲取上傳文件的絕對路徑實現(xiàn)方法

    js獲取上傳文件的絕對路徑實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨s獲取上傳文件的絕對路徑實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • babel插件去除console示例詳解

    babel插件去除console示例詳解

    這篇文章主要為大家介紹了babel插件去除console示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • JavaScript之ECharts用法講解

    JavaScript之ECharts用法講解

    這篇文章主要介紹了JavaScript之ECharts用法講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • JS FormData上傳文件的設(shè)置方法

    JS FormData上傳文件的設(shè)置方法

    使用FormData上傳文件時,總是獲取不到req.file對象。發(fā)現(xiàn)是沒有配置對FormData導(dǎo)致的,怎么解決這個問題呢?下面小編給大家?guī)砹薐S FormData上傳文件的設(shè)置方法,需要的朋友參考下吧
    2017-07-07
  • javascript實現(xiàn)根據(jù)3原色制作顏色選擇器的方法

    javascript實現(xiàn)根據(jù)3原色制作顏色選擇器的方法

    這篇文章主要介紹了javascript實現(xiàn)根據(jù)3原色制作顏色選擇器的方法,涉及javascript操作頁面元素屬性的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • JavaScript判斷頁面滾動方向的三種方法

    JavaScript判斷頁面滾動方向的三種方法

    這篇文章主要介紹了JavaScript判斷頁面滾動方向的三種方法:使用變量記錄、使用更精確的 delta 值判斷和使用 requestAnimationFrame 優(yōu)化性能,并通過代碼講解的非常詳細(xì),需要的朋友可以參考下
    2025-04-04

最新評論

赤壁市| 赣榆县| 洛川县| 青川县| 兰坪| 明水县| 盈江县| 朔州市| 武胜县| 江油市| 昌吉市| 沙河市| 奉贤区| 湖州市| 清丰县| 谷城县| 益阳市| 郴州市| 杭州市| 济宁市| 合山市| 南宁市| 黄梅县| 阿巴嘎旗| 特克斯县| 鸡东县| 萍乡市| 大石桥市| 抚远县| 栾城县| 青川县| 河间市| 乐陵市| 高州市| 逊克县| 福泉市| 鄂托克前旗| 伊春市| 松滋市| 新巴尔虎右旗| 阿图什市|