校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 文本修改留痕

文本修改留痕

熱門標簽:江西防封卡外呼系統怎么安裝 400電話辦理安徽 電銷智能機器人靠譜么 南通電話外呼系統開發 南寧外呼電銷系統招商 北京銷售外呼系統線路 石家莊電話機器人電話 沸思外呼線路 電銷機器人的宣傳語
在辦公自動化,公文審核的時候,就需要用到 留痕操作了,就是把修改的東西直接在文本上顯示,而不直接改動它。在以前,我沒有用VML去做,很勉強的用 TextRange 改變文本的顏色,然后增加一個層顯示更改信息。第一次修改還可以實現,但不能做到再次修改,因為,第二次修改的時候,那些原來創建的對象都消失了,而這些對象都是通過 Select 操作得到的,用戶不選擇,腳本就沒有辦法創建那些對象。
    不久前,我想到了 VML ,開始還覺得是不可能的事情,但我發現了 TextRange 對象一個很強大的方法 getClientRects(),這個方法可以返回 TextRange 對象包含的每一行的矩形信息。意思是說,如果你用鼠表選擇一段文本,文本會自動高亮顯示,這樣看上去就是一塊塊矩形組成的不規則圖形。getClientRects 方法就可以得到這些矩形的坐標和高寬,這樣一來,就可以在選擇的文本外套一層 VML 畫的矩形,Oh my god...真是酷呆了。當我第一次看到它的時候,興奮的抱著小白(貓)滿屋子亂跳。     接下來,講講 TextRange 對象以及 getClientRects 和 VML 結合畫痕跡:
    TextRange 對象,顧名思義,文本區域,就是網頁上的一部分區域,可以是文本也可以是圖像和別的段落格式。所有能用鼠標選擇的都可以變成 TextRange 對象。IE4 的時候就出現了。TextRange 有個強大的方法就是 execCommand(),它可以執行很多命令,動態更改網頁中內容、樣式。創建 TextRange 對象一般有兩種途徑,一種是用戶選擇了一段文本,可以使用 var oTextRange=document.selection.createRange(); 還有種就是直接把document 創建成 TextRange :var oTextRange=document.createTextRane() 。不知道有沒有注意,兩個方式使用的函數不一樣,第一個因為本省就是文字了,所有使用 createRange(), 第二個不能確定是否都是文字,所有,必須用 createTextRange()。
    使用 getClientRects 返回的是一個 TextRectangle 對象,它是一個集合,沒個子集擁有四個屬性 bottom,top,left,right ,就是兩個角的坐標,這個坐標值是相對于頁面的,所以可以直接應用到 VML 中來。
function createRect(num)
{
 var newMark=document.createElement("div id='mark"+num+"'>/div>");
 edit.insertBefore(newMark);
 var oRcts = oTempRange.getClientRects();//oTempRange是一個 TextRange 對象
 for(var i=0;ioRcts.length;i++)
 {
  var t=oRcts[i].top;
  var l=oRcts[i].left;
  var r=oRcts[i].right;
  var b=oRcts[i].bottom;
  var newRect=document.createElement("v:roundRect oncontextmenu='popID="+num+";popUp();' id='Rect"+num+"no"+i+"' style='position:absolute;visibility:hidden' filled=f strokeColor=red strokeWeight=1.5pt>/v:roundRect>");
  newMark.insertBefore(newRect);
  newRect.style.posTop=t+document.body.scrollTop-3;
  newRect.style.posLeft=l-2;
  newRect.style.width=r-l;
  newRect.style.height=b-t;
  newRect.style.visibility="";
 }
}

    其他的代碼就不再說了,我想說說整個腳本執行的過程。首先用戶用鼠標選擇一段文字,然后腳本馬上把選擇的文字創建成臨時 TextRange 對象,并且通過 execCommand 把這段文字的背景顏色改掉,以做對比。當用戶點右鍵的時候,腳本檢查到用戶的事件源,如果臨時 TextRange 對象存在,菜單上將顯示 “標記選擇中的”這項,如果事件源是已經標記過的文本,菜單上將顯示“取消標記”這項。當用戶意見選擇“標記選中的”的時候,腳本彈出 對話框,提示用戶意見輸入對選擇的這段文字的處理。
    腳本得到用戶的選擇,就執行上面的代碼,用 VML 把選擇的文字框起來,然后生成一個層,上面記錄的是修改的內容。當用戶選擇的“取消標記”,本身已經標記過的文字在點右鍵的事件上就有個 popID=XX 的表達式,popID是個全局變量,通過這個popID 到 Document 中去尋找相應的 VML 標記和層,然后使他們的 outerHTML 為空,就起到了取消標記的目的!
    可以訪問下面的頁面,可以實現過程的。
    文本修改留痕


    到目前為止,關于VML的介紹已經全部寫完了。當然我想這里面錯誤還是有的,理解上也有很不足,表達上還有欠缺的地方。由于 VML 應用的還不太普遍,但功能強大,我覺得有必要讓大家都了解一下VML技術,至少讓大家知道,很多東西其實都可以用VML完成的。大家一起研究吧!

標簽:北海 鹽城 云南 陽泉 衢州 晉中 來賓 寧夏

巨人網絡通訊聲明:本文標題《文本修改留痕》,本文關鍵詞  文本,修改,留痕,文本,修改,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《文本修改留痕》相關的同類信息!
  • 本頁收集關于文本修改留痕的相關信息資訊供網民參考!
  • 推薦文章

    上一篇:數據圖表

    下一篇:VML應用實例大全

    主站蜘蛛池模板: 藁城市| 宁国市| 孝昌县| 安徽省| 凤冈县| 周宁县| 兖州市| 阿鲁科尔沁旗| 花垣县| 泽库县| 依兰县| 康保县| 海淀区| 大城县| 雅江县| 重庆市| 德化县| 台北市| 浮梁县| 于都县| 资源县| 大兴区| 赤峰市| 金华市| 美姑县| 平乐县| 北宁市| 扎囊县| 德安县| 大埔区| 泰安市| 承德县| 中牟县| 望都县| 巫山县| 洛南县| 沂源县| 永胜县| 绥化市| 平顶山市| 松阳县|