一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

javascript Range對象跨瀏覽器常用操作第1/2頁

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

用rg.htmlText獲得選擇文本的html代碼,但獲得結果不盡人意,
如:<b>aaaa</b>bb ,當選擇aabb段時,.htmlTex返回的是<b>aa</b>bb而不是aa</b>bb
其他常用位置控制函數:
collapse: 合并前后選擇點,true為開始點,false為結尾點。
moveToPoint: 移動光標到坐標 moveToBookmark: 移動到書簽。
dom range的區域選擇
dom range對象選擇區域主要以dom節點為為坐標,所有邊界移動和區域選擇函數都是以dom節點為參照的
setEnd()setStart()是控制范圍的前邊界點和后邊界點位置的函數,
有兩個參數,第一個參數是dom節點,第二個參數是偏移量,這個參數和TextRange.move中不同,是相對于dom節點的偏移量。
如:有文字節點node1 nodeValue是aaabbbccc,setStart(node1,3)則設置開始位置在字符a、b之間
那如何像例1一樣選擇光標前4個字符呢,這需要了解dom range對象的幾個屬性:
endContainer 包含范圍的結束點的 dom節點。
endOffset endContainer 中的結束點位置。
startContainer 包含范圍的開始點的 dom節點。
startOffset startContainer 中的開始點位置。
例2:dom range選擇光標前4個字符
復制代碼 代碼如下:
var rg=window.getSelection().getRangeAt(0);
rg.setStart(rg.startContainer,rg.startOffset-4);//獲得當前range strat所在節點和偏移量,計算后作為參數
//在調用setStart后即顯式選擇,與TextRange不同
var text=rg.toString();//獲得選擇文本
rg.collapse(false);//collapse函數與TextRange.collapse相同

例2中range選擇范圍操作適用于單一的文本內容,如果是html內容就需要進一步計算才能正確得到,總的來看dom range在復雜dom結 構中進行相對范圍選擇是比較麻煩的。
另外,dom range沒有直接的方法獲得選擇內容的html代碼。在html可編輯狀態下可以通過surroundContents()方法用一個span之類的標簽包裹住內容后再通過innerHTML獲得內容,但是在選擇范圍邊界點在html開始和結束標簽內時(如:<a>123</a>邊界點在a標簽內)會拋出一個異常。
以下是測試用完整代碼,包含例1和例2的代碼和一個測試用html可編輯區。
復制代碼 代碼如下:
<!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();//顯式選擇文本區域,不調用此函數也可以獲得選擇的內容
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);//獲得當前range strat所在節點和偏移量,計算后作為參數
//在調用setStart后即顯式選擇,與TextRange不同
var text=rg.toString();//獲得選擇文本
rg.collapse(false);//collapse函數與TextRange.collapse相同
alert(text);
}
}
}
//-->
</SCRIPT>
<div id="ifram_div"></div>
</BODY>
</HTML>

JavaScript技術javascript Range對象跨瀏覽器常用操作第1/2頁,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 成人97在线观看免费高清 | 91.久久 | 日本欧美一区二区三区不卡视频 | 啪啪伊人网 | 激情小说 激情图片 | 加勒比综合网 | 青青国产成人久久激情91麻豆 | 国产成人综合亚洲 | 色视频网站色视频播放 | 欧亚精品一区二区三区 | 色一情一区二区三区四区 | 91精品一区二区三区在线观看 | 一区二区日韩 | 成人小视频在线免费观看 | 大量国产激情视频在线观看 | 在线视频一区二区三区在线播放 | 精彩视频一区二区三区 | 国产xx肥老妇视频奂费 | 精品视频在线观看免费 | 视频国产91 | 国内自拍视频在线看免费观看 | 91在线永久 | 亚洲欧美国产精品久久久 | 国产精品亚洲综合网站 | 久久亭亭 | 一级做a爱片性色毛片武则天五则 | 91嫩草国产线免费观看 | 国产色中色 | 亚洲色在线视频 | 99热香蕉 | 加勒比精品久久一区二区三区 | 污污网站免费入口链接 | 香蕉久热| 久久道 | 日本www色 | 99久久亚洲 | 午夜dj影院在线视频观看完整 | 国精品一区二区三区 | 在线播放亚洲视频 | 精品中文字幕在线观看 | 免费成人在线观看 |