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

javascript Range對(duì)象跨瀏覽器常用操作第1/2頁(yè)

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

開(kāi)發(fā)的功能主要涉及即時(shí)代碼著色(CodeColoring)和語(yǔ)法提示(CodeHints)功能,稍后會(huì)總結(jié)功能開(kāi)發(fā)中問(wèn)題或提供源碼。
以下是個(gè)人對(duì)Range對(duì)象的了解和常用操作的實(shí)例和總結(jié):
Range對(duì)象
Range對(duì)象表示文檔的連續(xù)范圍區(qū)域,如用戶在瀏覽器窗口中用鼠標(biāo)拖動(dòng)選中的區(qū)域。
dom標(biāo)準(zhǔn)Range對(duì)象
http://www.w3school.com.cn/xmldom/dom_range.asp
在ie中使用TextRange對(duì)象
http://www.hbcms.com/main/dhtml/objects/obj_textrange.html
range對(duì)象常用的建立方法
在開(kāi)發(fā)中除了上述文檔中的標(biāo)準(zhǔn)建立方法,大多如下方式建立
標(biāo)準(zhǔn)dom:
var range=window.getSelection().getRangeAt(0);
ie:
var range=document.selection.createRange();
注意:標(biāo)準(zhǔn)dom是從window中獲取selection對(duì)象,而ie是從document對(duì)象中獲取。
標(biāo)準(zhǔn)dom range對(duì)象(以下稱dom rang)和ie的TextRange對(duì)象(以下稱TextRange),在操作模式上有很大區(qū)別,可以說(shuō)dom range是基于dom結(jié)構(gòu)控制的,TextRange是基于文本節(jié)點(diǎn)字節(jié)控制的,閱讀下面示例會(huì)更好理解這二者的操作模式。以下所說(shuō)的range對(duì)象是指在html結(jié)構(gòu)中進(jìn)行選擇和更改(designMode=on contentEditable=true狀態(tài)下)操作,在textarea中的操作比這簡(jiǎn)單,不是當(dāng)前的研究環(huán)境。
range對(duì)象的具體方法和屬性請(qǐng)查看上邊列出的相關(guān)api文檔,下面對(duì)實(shí)際開(kāi)發(fā)過(guò)程中常用功能講解
1.區(qū)域選擇 獲取區(qū)域中文本
TextRange的區(qū)域選擇
TextRange對(duì)象主要使用以下方法控制區(qū)域的選擇:moveStart moveEnd move
這三個(gè)函數(shù)使用相同的參數(shù)語(yǔ)法:fn(sUnit [, iCount])
第一個(gè)參數(shù)是指移動(dòng)的單位,可以使用的參數(shù):character(字符)、word(詞)、sentence(段落)、textedit(整個(gè)編輯區(qū))
第二個(gè)參數(shù)指移動(dòng)的數(shù)量單位,負(fù)數(shù)向所在位置之前移動(dòng),正數(shù)向所在位置之后移動(dòng)。
在實(shí)際開(kāi)發(fā)中一般使用character,其他幾個(gè)參數(shù)在中文環(huán)境和html編輯時(shí),和預(yù)想位置有偏差。
例1:TextRange選擇光標(biāo)前4個(gè)字符

復(fù)制代碼 代碼如下:

var rg=document.selection.createRange();
rg.moveStart("character",-4);
rg.select();//顯式選擇文本區(qū)域,不調(diào)用此函數(shù)也可以獲得選擇的內(nèi)容
var text=rg.text;//獲得選擇的文本
var htmlText=rg.htmlText;//獲得選擇文本的html代碼

用rg.htmlText獲得選擇文本的html代碼,但獲得結(jié)果不盡人意,
如:<b>aaaa</b>bb ,當(dāng)選擇aabb段時(shí),.htmlTex返回的是<b>aa</b>bb而不是aa</b>bb
其他常用位置控制函數(shù):
collapse: 合并前后選擇點(diǎn),true為開(kāi)始點(diǎn),false為結(jié)尾點(diǎn)。
moveToPoint: 移動(dòng)光標(biāo)到坐標(biāo) moveToBookmark: 移動(dòng)到書(shū)簽。
dom range的區(qū)域選擇
dom range對(duì)象選擇區(qū)域主要以dom節(jié)點(diǎn)為為坐標(biāo),所有邊界移動(dòng)和區(qū)域選擇函數(shù)都是以dom節(jié)點(diǎn)為參照的
setEnd()setStart()是控制范圍的前邊界點(diǎn)和后邊界點(diǎn)位置的函數(shù),
有兩個(gè)參數(shù),第一個(gè)參數(shù)是dom節(jié)點(diǎn),第二個(gè)參數(shù)是偏移量,這個(gè)參數(shù)和TextRange.move中不同,是相對(duì)于dom節(jié)點(diǎn)的偏移量。
如:有文字節(jié)點(diǎn)node1 nodeValue是aaabbbccc,setStart(node1,3)則設(shè)置開(kāi)始位置在字符a、b之間
那如何像例1一樣選擇光標(biāo)前4個(gè)字符呢,這需要了解dom range對(duì)象的幾個(gè)屬性:
endContainer 包含范圍的結(jié)束點(diǎn)的 dom節(jié)點(diǎn)。
endOffset endContainer 中的結(jié)束點(diǎn)位置。
startContainer 包含范圍的開(kāi)始點(diǎn)的 dom節(jié)點(diǎn)。
startOffset startContainer 中的開(kāi)始點(diǎn)位置。
例2:dom range選擇光標(biāo)前4個(gè)字符
復(fù)制代碼 代碼如下:

var rg=window.getSelection().getRangeAt(0);
rg.setStart(rg.startContainer,rg.startOffset-4);//獲得當(dāng)前range strat所在節(jié)點(diǎn)和偏移量,計(jì)算后作為參數(shù)
//在調(diào)用setStart后即顯式選擇,與TextRange不同
var text=rg.toString();//獲得選擇文本
rg.collapse(false);//collapse函數(shù)與TextRange.collapse相同

例2中range選擇范圍操作適用于單一的文本內(nèi)容,如果是html內(nèi)容就需要進(jìn)一步計(jì)算才能正確得到,總的來(lái)看dom range在復(fù)雜dom結(jié) 構(gòu)中進(jìn)行相對(duì)范圍選擇是比較麻煩的。
另外,dom range沒(méi)有直接的方法獲得選擇內(nèi)容的html代碼。在html可編輯狀態(tài)下可以通過(guò)surroundContents()方法用一個(gè)span之類(lèi)的標(biāo)簽包裹住內(nèi)容后再通過(guò)innerHTML獲得內(nèi)容,但是在選擇范圍邊界點(diǎn)在html開(kāi)始和結(jié)束標(biāo)簽內(nèi)時(shí)(如:<a>123</a>邊界點(diǎn)在a標(biāo)簽內(nèi))會(huì)拋出一個(gè)異常。
以下是測(cè)試用完整代碼,包含例1和例2的代碼和一個(gè)測(cè)試用html可編輯區(qū)。
復(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;}</style><body><b>aaaa</b><u>bbbb</u>cccddd</body></html>');
f.close();
if(f.attachEvent){
f.attachEvent("onkeyup",fun1);
}else{
fw.addEventListener("keyup",fun1,true);
}
function fun1(){
if(f.selection){
var rg=f.selection.createRange();
rg.moveStart("character",-4);
//rg.select();//顯式選擇文本區(qū)域,不調(diào)用此函數(shù)也可以獲得選擇的內(nèi)容
var text=rg.text;//獲得選擇的文本
var htmlText=rg.htmlText;//獲得選擇文本的html代碼
alert(text);
}else{
var rg=fw.getSelection().getRangeAt(0);
rg.setStart(rg.startContainer,rg.startOffset-4);//獲得當(dāng)前range strat所在節(jié)點(diǎn)和偏移量,計(jì)算后作為參數(shù)
//在調(diào)用setStart后即顯式選擇,與TextRange不同
var text=rg.toString();//獲得選擇文本
rg.collapse(false);//collapse函數(shù)與TextRange.collapse相同
alert(text);
}
}
}
//-->
</SCRIPT>
<div id="ifram_div"></div>
</BODY>
</HTML>

相關(guān)文章

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

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

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

    javascript實(shí)現(xiàn)無(wú)縫上下滾動(dòng)特效

    這篇文章主要介紹了javascript實(shí)現(xiàn)無(wú)縫上下滾動(dòng)特效的相關(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
  • 簡(jiǎn)單的網(wǎng)頁(yè)廣告特效實(shí)例

    簡(jiǎn)單的網(wǎng)頁(yè)廣告特效實(shí)例

    下面小編就為大家?guī)?lái)一篇簡(jiǎn)單的網(wǎng)頁(yè)廣告特效實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • js獲取上傳文件的絕對(duì)路徑實(shí)現(xiàn)方法

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

    下面小編就為大家?guī)?lái)一篇js獲取上傳文件的絕對(duì)路徑實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • babel插件去除console示例詳解

    babel插件去除console示例詳解

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

    JavaScript之ECharts用法講解

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

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

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

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

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

    JavaScript判斷頁(yè)面滾動(dòng)方向的三種方法

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

最新評(píng)論

高安市| 会昌县| 苍溪县| 灵丘县| 保靖县| 孟津县| 玛沁县| 锡林郭勒盟| 聂拉木县| 买车| 于田县| 盐边县| 梅河口市| 建水县| 大荔县| 梅河口市| 威远县| 建始县| 吴江市| 临武县| 大安市| 宁国市| 北辰区| 淮南市| 金堂县| 焦作市| 乐山市| 连城县| 太仆寺旗| 大理市| 南阳市| 宁阳县| 武山县| 灵宝市| 黔南| 西乌珠穆沁旗| 溧水县| 彰武县| 三亚市| 秭归县| 文成县|