摘要:操作富文本方法與富文本編輯交互的方式,就是使用。將當(dāng)前選中區(qū)復(fù)制到剪貼板并刪除之。增加選中文本的縮進(jìn)。富文本選區(qū)在富文本編輯器中,使用框架的方法,可以確定實際選擇的文本。這個方法是對象和對象的屬性,調(diào)用它返回一個表示當(dāng)前選擇文本的對象。
富文本測試
BX9054: 各瀏覽器對 document.execCommand 方法的首參數(shù)可選值范圍存在差異
部分內(nèi)容來自w3c help:http://w3help.org/zh-cn/kb/
w3cHelp
在頁面中嵌入一個包含空的HTML頁面的iframe。通過設(shè)置designMode屬性,這個空白的HTML頁面就可以被編輯,編輯對象就是body元素的HTML代碼。designMode屬性有兩個可能的值:on和off(默認(rèn)值)。
window.addEventListener("load", function () { frames["firstFrame"].document.designMode = "on"; //這里返回錯誤信息"Blocked a frame with origin "null" from accessing a frame with origin "null". Protocols, domains, and ports must match."是因為環(huán)境的問題,protocols為file,放在瀏覽器上就沒有問題了。 });使用contenteditable屬性
只要把元素設(shè)置contenteditable屬性就行了(它的屬性值有3個,true表示打開,false表示關(guān)閉,inhert表示從父元素那里繼承。):
hello
任何元素都可以,甚至是button,不過設(shè)置之后你會覺得很怪異。
操作富文本ocument.execCommand()方法與富文本編輯交互的方式,就是使用document.execCommand()。這個方法可以對文檔執(zhí)行預(yù)定義的命令,而且可以應(yīng)用大多數(shù)格式。
可以為document.execCommand()方法傳遞3個參數(shù):要執(zhí)行的命令名稱,表示瀏覽器是否應(yīng)該為當(dāng)前命令提供用戶界面的一個布爾值和執(zhí)行命令必須的一個值(不需要值,可設(shè)為null)。為了保證瀏覽器兼容,需要設(shè)置第二個參數(shù)為false。
另外在各瀏覽器對應(yīng)的開發(fā)者站點 msdn.microsoft.com (MSDN)、developer.mozilla.org (Mozilla Developer Network)、developer.apple.com (Apple Developer)、dev.opera.com (Opera Developer Community) 中,MSDN 與 Mozilla Developer Network 均有詳細(xì)的 execCommand 方法的首參數(shù)可選值描述,Opera Developer Community 有簡要說明, Apple Developer 無任何可查資料。
不同瀏覽器支持的預(yù)定義命令不一樣,下標(biāo)是被支持最多的命令(加粗的):
2D-Position 允許通過拖曳移動絕對定位的對象。
AbsolutePosition 設(shè)定元素的 position 屬性為“absolute”(絕對)。
BackColor 設(shè)置或獲取當(dāng)前選中區(qū)的背景顏色。
BlockDirLTR 目前尚未支持。
BlockDirRTL 目前尚未支持。
Bold 切換當(dāng)前選中區(qū)的粗體顯示與否。
BrowseMode 目前尚未支持。
Copy 將當(dāng)前選中區(qū)復(fù)制到剪貼板。
CreateBookmark 創(chuàng)建一個書簽錨或獲取當(dāng)前選中區(qū)或插入點的書簽錨的名稱。
CreateLink 在當(dāng)前選中區(qū)上插入超級鏈接,或顯示一個對話框允許用戶指定要為當(dāng)前選中區(qū)插入的超級鏈接的 URL。
Cut 將當(dāng)前選中區(qū)復(fù)制到剪貼板并刪除之。
Delete 刪除當(dāng)前選中區(qū)。
DirLTR 目前尚未支持。
DirRTL 目前尚未支持。
EditMode 目前尚未支持。
FontName 設(shè)置或獲取當(dāng)前選中區(qū)的字體。
FontSize 設(shè)置或獲取當(dāng)前選中區(qū)的字體大小。
ForeColor 設(shè)置或獲取當(dāng)前選中區(qū)的前景(文本)顏色。
FormatBlock 設(shè)置當(dāng)前塊格式化標(biāo)簽。
Indent 增加選中文本的縮進(jìn)。
InlineDirLTR 目前尚未支持。
InlineDirRTL 目前尚未支持。
InsertButton 用按鈕控件覆蓋當(dāng)前選中區(qū)。
InsertFieldset 用方框覆蓋當(dāng)前選中區(qū)。
InsertHorizontalRule 用水平線覆蓋當(dāng)前選中區(qū)。
InsertIFrame 用內(nèi)嵌框架覆蓋當(dāng)前選中區(qū)。
InsertImage 用圖像覆蓋當(dāng)前選中區(qū)。
InsertInputButton 用按鈕控件覆蓋當(dāng)前選中區(qū)。
InsertInputCheckbox 用復(fù)選框控件覆蓋當(dāng)前選中區(qū)。
InsertInputFileUpload 用文件上載控件覆蓋當(dāng)前選中區(qū)。
InsertInputHidden 插入隱藏控件覆蓋當(dāng)前選中區(qū)。
InsertInputImage 用圖像控件覆蓋當(dāng)前選中區(qū)。
InsertInputPassword 用密碼控件覆蓋當(dāng)前選中區(qū)。
InsertInputRadio 用單選鈕控件覆蓋當(dāng)前選中區(qū)。
InsertInputReset 用重置控件覆蓋當(dāng)前選中區(qū)。
InsertInputSubmit 用提交控件覆蓋當(dāng)前選中區(qū)。
InsertInputText 用文本控件覆蓋當(dāng)前選中區(qū)。
InsertMarquee 用空字幕覆蓋當(dāng)前選中區(qū)。
InsertOrderedList 切換當(dāng)前選中區(qū)是編號列表還是常規(guī)格式化塊。
InsertParagraph 用換行覆蓋當(dāng)前選中區(qū)。
InsertSelectDropdown 用下拉框控件覆蓋當(dāng)前選中區(qū)。
InsertSelectListbox 用列表框控件覆蓋當(dāng)前選中區(qū)。
InsertTextArea 用多行文本輸入控件覆蓋當(dāng)前選中區(qū)。
InsertUnorderedList 切換當(dāng)前選中區(qū)是項目符號列表還是常規(guī)格式化塊。
Italic 切換當(dāng)前選中區(qū)斜體顯示與否。
JustifyCenter 將當(dāng)前選中區(qū)在所在格式化塊置中。
JustifyFull 目前尚未支持。
JustifyLeft 將當(dāng)前選中區(qū)所在格式化塊左對齊。
JustifyNone 目前尚未支持。
JustifyRight 將當(dāng)前選中區(qū)所在格式化塊右對齊。
LiveResize 迫使 MSHTML 編輯器在縮放或移動過程中持續(xù)更新元素外觀,而不是只在移動或縮放完成后更新。
MultipleSelection 允許當(dāng)用戶按住 Shift 或 Ctrl 鍵時一次選中多于一個站點可選元素。
Open 目前尚未支持。
Outdent 減少選中區(qū)所在格式化塊的縮進(jìn)。
OverWrite 切換文本狀態(tài)的插入和覆蓋。
Paste 用剪貼板內(nèi)容覆蓋當(dāng)前選中區(qū)。
PlayImage 目前尚未支持。
Print 打開打印對話框以便用戶可以打印當(dāng)前頁。
Redo 目前尚未支持。
Refresh 刷新當(dāng)前文檔。
RemoveFormat 從當(dāng)前選中區(qū)中刪除格式化標(biāo)簽。
RemoveParaFormat 目前尚未支持。
SaveAs 將當(dāng)前 Web 頁面保存為文件。
SelectAll 選中整個文檔。
SizeToControl 目前尚未支持。
SizeToControlHeight 目前尚未支持。
SizeToControlWidth 目前尚未支持。
Stop 目前尚未支持。
StopImage 目前尚未支持。
StrikeThrough 目前尚未支持。
Subscript 目前尚未支持。
Superscript 目前尚未支持。
UnBookmark 從當(dāng)前選中區(qū)中刪除全部書簽。
Underline 切換當(dāng)前選中區(qū)的下劃線顯示與否。
Undo 目前尚未支持。
Unlink 從當(dāng)前選中區(qū)中刪除全部超級鏈接。
Unselect 清除當(dāng)前選中區(qū)的選中狀態(tài)。
可以在任何時候使用這些命令來修改富文本區(qū)域的外觀:
frames["framing"].document.execCommand("bold", false, null);
同樣也使用于頁面中contenteditable屬性為“true”的區(qū)塊,只要把框架的引用替換成當(dāng)前窗口的document對象就可以了:
p.addEventListener("contextmenu", function () { event.preventDefault(); document.execCommand("backcolor", false, "red"); });
上述代碼當(dāng)點擊右鍵會將p元素的backgroundColor顏色變?yōu)閞ed(在chrome上,這則代碼會在p元素周圍加上span代碼并附上style屬性);
除了命令之外,還有一些與命令相關(guān)的方法。
第一個方法是queryCommandEnabled(),可以檢驗是否可以針對當(dāng)前選擇的文本或者當(dāng)前插入字符處所在的位置執(zhí)行相應(yīng)的命令。這個方法接收一個參數(shù):即要檢測的命令。如果允許返回true。但并不意味著可以執(zhí)行命令,只是該命令對當(dāng)前文本可以或不可以執(zhí)行。
console.log(document.queryCommandSupported("bold"));
第二個方法是queryCommandState()方法用來確定是否已將指定的命令應(yīng)用到了選擇的文本。
第三個方法是queryCommandValue()方法用于取得執(zhí)行命令時傳入的值。
富文本選區(qū)在富文本編輯器中,使用框架(iframe)的getSelection()方法,可以確定實際選擇的文本。這個方法是window對象和document對象的屬性,調(diào)用它返回一個表示當(dāng)前選擇文本的selection對象。
每個Selection對象都有下面的屬性:
anchorNode: 選區(qū)起點所在的節(jié)點
anchorOffset: 到達(dá)選區(qū)起點位置之前跳過的anchorNode中的字符數(shù)量
focusNode: 選區(qū)終點所在的節(jié)點
focusOffset: focusNode中包含在選區(qū)之內(nèi)的字符數(shù)量
isCollapsed: 起點終點是否重合
rangeCount: 包含DOM范圍的數(shù)量
type:
baseNode:
baseOffset:
extentNode:
extentOffset:
以及方法:
getRangeAt(index): 返回索引對應(yīng)的選區(qū)中的DOM范圍
addRange(range): 將指定的DOM范圍添加到選區(qū)中
removeAllRanges: 移除所有DOM范圍
removeRange(range): 從選區(qū)中移除指定的DOM范圍
collapse(node, offset): 將選區(qū)折疊到指定節(jié)點中的相應(yīng)的文本偏移位置
collapseToStart: 折疊到起點
collapseToEnd: 折疊到終點
extend(node,offset): 通過將focusNode和focusOffset移動到指定的值來擴(kuò)展選區(qū)
selectAllChildren(node): 清除選區(qū)并選擇指定節(jié)點的所有子節(jié)點
deleteFromDocument: 從文檔中刪除選區(qū)中的文本與document.execCommand("delete",false,null)相同
containsNode(node): 確定指定的節(jié)點是否包含在選區(qū)中
toString(): 返回選區(qū)所包含的文本內(nèi)容
empty:
setPosition:
setBaseAndExtent:
modify:
toString:
constructor:
如,獲取選擇的文本:
var selection = document.getSelection(); console.log(selection.toString());
又如當(dāng)用戶選擇文本后右鍵改變目標(biāo)style:
p.addEventListener("contextmenu", function() { event.preventDefault(); document.execCommand("copy",""); //selection富文本選區(qū) var selection = document.getSelection(); //獲取選擇的文本 var selectedText = selection.toString(); // 取得代表選區(qū)的范圍 var range = selection.getRangeAt(0); //新建一個span設(shè)置style的背景顏色為黃色 var span = document.createElement("span"); span.style.backgroundColor = "yellow"; range.surroundContents(span); });
部分舊版瀏覽器需要使用window.getSelection()或document.getSelection();
IE則需要使用它瀏覽器本身的text屬性等。也可以使用htmlText屬性和pasteHTML()方法等。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/78592.html
摘要:后面兩個編輯器自帶,不用單獨下載,添上就可以了添加相關(guān)插件這樣就完成了代碼高亮效果不錯在前臺使用為了讓用戶在前臺也能使用富文本編輯器,還得對代碼稍加改動。對于有些不喜歡的人來說,甚至可以連博文都使用提供的富文本編輯器。 前面我們已經(jīng)實現(xiàn)了用Markdown語法寫文章了。但是文章的評論用Markdown就不太合適了,你不能強求用戶也花時間去熟悉語法啊。另外評論中通常還有表情、帶顏色的字體...
摘要:布爾值,表示當(dāng)前字段是否被禁用。指向當(dāng)前字段所屬表單的指針只讀。文本框腳本在中,有兩種方式來表現(xiàn)文本框一種是使用元素的單行文本框,另一種是使用的多行文本框。然后,我們把這個函數(shù)指定為每個文本框的事件處理程序。 本章知識架構(gòu) showImg(https://segmentfault.com/img/bVbvCTV?w=921&h=713); var EventUtil = { /...
表單腳本 表單的基礎(chǔ)知識 HTMLFormElement有自己獨特的屬性和方法 acceptCharset,服務(wù)器能夠處理的字符集,等價于HTML中的accept-charset特性 action,接受請求的URL,等價于HTML中的action特性 elements,表單中所有控件的集合 enctype,請求的編碼類型,等價于HTML中的enctype特性 length,表單中控件的數(shù)量 m...
摘要:彈出層是一個輕量級的庫用于管理工具提示和彈窗效果。一個帶有的跨瀏覽器富文本編輯器。由制作,適用于每天寫作的富文本編輯器。輕量的操作庫。是一個快速簡單輕量級的瀏覽器功能檢測庫。它沒有任何的依賴,并且壓縮后僅有。極小跨平臺的全屏插件。 在這里維持一個持續(xù)更新的地方 圖片 baguetteBox.js - 是一個簡單易用的響應(yīng)式圖像燈箱效果腳本。demo Lightgallery.js -...
摘要:彈出層是一個輕量級的庫用于管理工具提示和彈窗效果。一個帶有的跨瀏覽器富文本編輯器。由制作,適用于每天寫作的富文本編輯器。輕量的操作庫。是一個快速簡單輕量級的瀏覽器功能檢測庫。它沒有任何的依賴,并且壓縮后僅有。極小跨平臺的全屏插件。 在這里維持一個持續(xù)更新的地方 圖片 baguetteBox.js - 是一個簡單易用的響應(yīng)式圖像燈箱效果腳本。demo Lightgallery.js -...
閱讀 2570·2021-09-06 15:02
閱讀 3200·2021-09-02 10:18
閱讀 2821·2019-08-30 15:44
閱讀 685·2019-08-30 15:43
閱讀 1948·2019-08-30 14:08
閱讀 2758·2019-08-30 13:16
閱讀 1397·2019-08-26 13:52
閱讀 931·2019-08-26 12:21