国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

高級(jí)JavaScript。如何用JavaScript手?jǐn)]一個(gè)富文本編輯器?

這篇具有很好參考價(jià)值的文章主要介紹了高級(jí)JavaScript。如何用JavaScript手?jǐn)]一個(gè)富文本編輯器?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

要素過(guò)多建議收藏

- 富文本編輯

基本的技術(shù)就是在空白 HTML 文件中嵌入一個(gè)
iframe 。通過(guò) designMode 屬性,可以將這個(gè)空白文檔變成可以編輯的,實(shí)際編輯的則是 <body> 元素
HTML 。 designMode 屬性有兩個(gè)可能的值: "off" (默認(rèn)值)和 "on" 。設(shè)置為 "on" 時(shí),整個(gè)文檔
都會(huì)變成可以編輯的(顯示插入光標(biāo)),從而可以像使用文字處理程序一樣編輯文本,通過(guò)鍵盤(pán)將文本
標(biāo)記為粗體、斜體,等等。
作為 iframe 源的是一個(gè)非常簡(jiǎn)單的空白 HTML 頁(yè)面。下面是一個(gè)例子:
<!DOCTYPE html>
<html>
	<head>
		<title>Blank Page for Rich Text Editing</title>
	</head>
	<body>
	</body>
</html>
這個(gè)頁(yè)面會(huì)像其他任何頁(yè)面一樣加載到 iframe 里。為了可以編輯,必須將文檔的 designMode
性設(shè)置為 "on" 。不過(guò),只有在文檔完全加載之后才可以設(shè)置。在這個(gè)包含頁(yè)面內(nèi),需要使用 onload
事件處理程序在適當(dāng)時(shí)機(jī)設(shè)置 designMode ,如下面的例子所示:
<iframe name="richedit" style="height: 100px; width: 100px"></iframe> 
<script> 
 window.addEventListener("load", () => { 
 frames["richedit"].document.designMode = "on"; 
 }); 
</script>
以上代碼加載之后,可以在頁(yè)面上看到一個(gè)類似文本框的區(qū)域。這個(gè)框的樣式具有網(wǎng)頁(yè)默認(rèn)樣式,
不過(guò)可以通過(guò) CSS 調(diào)整。

- 使用 contenteditable

還有一種處理富文本的方式,也是 IE 最早實(shí)現(xiàn)的,即指定 contenteditable 屬性。可以給頁(yè)面
中的任何元素指定 contenteditable 屬性,然后該元素會(huì)立即被用戶編輯。這種方式更受歡迎,因?yàn)?
不需要額外的 iframe 、空頁(yè)面和 JavaScript ,只給元素添加一個(gè) contenteditable 屬性即可,比如:
<div class="editable" id="richedit" contenteditable ></div>
元素中包含的任何文本都會(huì)自動(dòng)被編輯,元素本身類似于 <textarea> 元素。通過(guò)設(shè)置
contentEditable 屬性,也可以隨時(shí)切換元素的可編輯狀態(tài):
let div = document.getElementById("richedit");
richedit.contentEditable = "true";
contentEditable 屬性有 3 個(gè)可能的值: "true" 表示開(kāi)啟, "false" 表示關(guān)閉, "inherit" 表示
繼承父元素的設(shè)置(因?yàn)樵? contenteditable 元素內(nèi)部會(huì)創(chuàng)建和刪除元素)。 IE Firefox 、 Chrome
Safari Opera 及所有主流移動(dòng)瀏覽器都支持 contentEditable 屬性。

- 與富文本交互

與富文本編輯器交互的主要方法是使用 document.execCommand() 。這個(gè)方法在文檔上執(zhí)行既定
的命令,可以實(shí)現(xiàn)大多數(shù)格式化任務(wù)。 document.execCommand() 可以接收 3 個(gè)參數(shù):要執(zhí)行的命令、
表示瀏覽器是否為命令提供用戶界面的布爾值和執(zhí)行命令必需的值(如果不需要?jiǎng)t為 null )。為跨瀏覽
器兼容,第二個(gè)參數(shù)應(yīng)該始終為 false ,因?yàn)? Firefox 會(huì)在其為 true 時(shí)拋出錯(cuò)誤。
不同瀏覽器支持的命令也不一樣。下表列出了最常用的命令。
高級(jí)JavaScript。如何用JavaScript手?jǐn)]一個(gè)富文本編輯器?,javascript,面試,HTML,javascript,開(kāi)發(fā)語(yǔ)言,ecmascript
高級(jí)JavaScript。如何用JavaScript手?jǐn)]一個(gè)富文本編輯器?,javascript,面試,HTML,javascript,開(kāi)發(fā)語(yǔ)言,ecmascript

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-813262.html

剪貼板相關(guān)的命令與瀏覽器關(guān)系密切。雖然這些命令并不都可以通過(guò) document.execCommand()
使用,但相應(yīng)的鍵盤(pán)快捷鍵都是可以用的。
這些命令可以用于修改內(nèi)嵌窗格( iframe )中富文本區(qū)域的外觀,如下面的例子所示:
// 在內(nèi)嵌窗格中切換粗體文本樣式
frames["richedit"].document.execCommand("bold", false, null);
// 在內(nèi)嵌窗格中切換斜體文本樣式
frames["richedit"].document.execCommand("italic", false, null);
// 在內(nèi)嵌窗格中創(chuàng)建指向 www.wrox.com 的鏈接
frames["richedit"].document.execCommand("createlink", false,
"http://www.wrox.com");
// 在內(nèi)嵌窗格中為內(nèi)容添加 <h1> 標(biāo)簽
frames["richedit"].document.execCommand("formatblock", false, "<h1>");
同樣的方法也可以用于頁(yè)面中添加了 contenteditable 屬性的元素,只不過(guò)要使用當(dāng)前窗口而不
是內(nèi)嵌窗格中的 document 對(duì)象:
// 切換粗體文本樣式
document.execCommand("bold", false, null);
// 切換斜體文本樣式
document.execCommand("italic", false, null);
// 創(chuàng)建指向 www.wrox.com 的鏈接
document.execCommand("createlink", false, "http://www.wrox.com");
// 為內(nèi)容添加 <h1> 標(biāo)簽
document.execCommand("formatblock", false, "<h1>");

?

注意,即使命令是所有瀏覽器都支持的,命令生成的 HTML 通常差別也很大。例如,為選中文本
應(yīng)用 bold 命令在 IE Opera 中會(huì)使用 <strong> 標(biāo)簽,在 Safari Chrome 中會(huì)使用 <b>標(biāo)簽,而在Firefox 中會(huì)使用 <span> 標(biāo)簽。在富文本編輯中,不能依賴瀏覽器生成的 HTML,因?yàn)槊顚?shí)現(xiàn)和格式 轉(zhuǎn)換都是通過(guò) innerHTML 完成的。
還有與命令相關(guān)的其他一些方法。第一個(gè)方法是 queryCommandEnabled() ,此方法用于確定對(duì)當(dāng)
前選中文本或光標(biāo)所在位置是否可以執(zhí)行相關(guān)命令。它只接收一個(gè)參數(shù),即要檢查的命令名。如果可編 輯區(qū)可以執(zhí)行該命令就返回 true ,否則返回 false 。來(lái)看下面的例子:
let result = frames["richedit"].document.queryCommandEnabled("bold");
以上代碼在當(dāng)前選區(qū)可以執(zhí)行 "bold" 命令時(shí)返回 true 。不過(guò)要注意, queryCommandEnabled()
返回 true 并不代表允許執(zhí)行相關(guān)命令,只代表當(dāng)前選區(qū)適合執(zhí)行相關(guān)命令。在 Firefox 中,
queryCommandEnabled("cut") 即使默認(rèn)不允許剪切也會(huì)返回 true 。
另一個(gè)方法 queryCommandState() 用于確定相關(guān)命令是否應(yīng)用到了當(dāng)前文本選區(qū)。例如,要確定
當(dāng)前選區(qū)的文本是否為粗體,可以這樣:
let isBold = frames["richedit"].document.queryCommandState("bold");
如果之前給文本選區(qū)應(yīng)用過(guò) "bold" 命令,則以上代碼返回 true 。全功能富文本編輯器可以利用這
個(gè)方法更新粗體、斜體等按鈕。
最后一個(gè)方法是 queryCommandValue() ,此方法可以返回執(zhí)行命令時(shí)使用的值(即前面示例的
execCommand() 中的第三個(gè)參數(shù))。如果對(duì)一段選中文本應(yīng)用了值為 7 "fontsize"命令,則如下代 碼會(huì)返回 7
let fontSize = frames["richedit"].document.queryCommandValue("fontsize");
這個(gè)方法可用于確定如何將命令應(yīng)用于文本選區(qū),從而進(jìn)一步?jīng)Q定是否需要執(zhí)行下一個(gè)命令。

- 富文件選擇?

在內(nèi)嵌窗格中使用 getSelection() 方法,可以獲得富文本編輯器的選區(qū)。這個(gè)方法暴露在
document window 對(duì)象上,返回表示當(dāng)前選中文本的 Selection 對(duì)象。每個(gè) Selection 對(duì)象都擁
有以下屬性。
? anchorNode :選區(qū)開(kāi)始的節(jié)點(diǎn)。
? anchorOffset :在 anchorNode 中,從開(kāi)頭到選區(qū)開(kāi)始跳過(guò)的字符數(shù)。
? focusNode :選區(qū)結(jié)束的節(jié)點(diǎn)。
? focusOffset focusNode 中包含在選區(qū)內(nèi)的字符數(shù)。
? isCollapsed :布爾值,表示選區(qū)起點(diǎn)和終點(diǎn)是否在同一個(gè)地方。
? rangeCount :選區(qū)中包含的 DOM 范圍數(shù)量。
Selection 的屬性并沒(méi)有包含很多有用的信息。好在它的以下方法提供了更多信息,并允許操作
選區(qū)。
? addRange( range ) :把給定的 DOM 范圍添加到選區(qū)。
? collapse( node, offset ) :將選區(qū)折疊到給定節(jié)點(diǎn)中給定的文本偏移處。
? collapseToEnd() :將選區(qū)折疊到終點(diǎn)。
? collapseToStart() :將選區(qū)折疊到起點(diǎn)。
? containsNode( node ) :確定給定節(jié)點(diǎn)是否包含在選區(qū)中。
? deleteFromDocument() :從文檔中刪除選區(qū)文本。與執(zhí)行 execCommand("delete", false,
null) 命令結(jié)果相同。
? extend( node, offset ) :通過(guò)將 focusNode focusOffset 移動(dòng)到指定值來(lái)擴(kuò)展選區(qū)。
? getRangeAt( index ) :返回選區(qū)中指定索引處的 DOM 范圍。
? removeAllRanges() :從選區(qū)中移除所有 DOM 范圍。這實(shí)際上會(huì)移除選區(qū),因?yàn)檫x區(qū)中至少
要包含一個(gè)范圍。
? removeRange( range ) :從選區(qū)中移除指定的 DOM 范圍。
? selectAllChildren( node ) :清除選區(qū)并選擇給定節(jié)點(diǎn)的所有子節(jié)點(diǎn)。
? toString() :返回選區(qū)中的文本內(nèi)容。
Selection 對(duì)象的這個(gè)方法極其強(qiáng)大,充分利用了 DOM 范圍來(lái)管理選區(qū)。操縱 DOM 范圍可以實(shí)
現(xiàn)比 execCommand() 更細(xì)粒度的控制,因?yàn)榭梢灾苯訉?duì)選中文本的 DOM 內(nèi)容進(jìn)行操作。來(lái)看下面的 例子:
let selection = frames["richedit"].getSelection(); 
// 取得選中的文本
let selectedText = selection.toString(); 
// 取得表示選區(qū)的范圍
let range = selection.getRangeAt(0); 
// 高亮選中的文本
let span = frames["richedit"].document.createElement("span"); 
span.style.backgroundColor = "yellow"; 
range.surroundContents(span);
以上代碼會(huì)在富文本編輯器中給選中文本添加黃色高亮背景。實(shí)現(xiàn)方式是在默認(rèn)選區(qū)使用 DOM
圍,用 surroundContents() 方法給選中文本添加背景為黃色的 <span> 標(biāo)簽。
getSelection() 方法在 HTML5 中進(jìn)行了標(biāo)準(zhǔn)化, IE9 以及 Firefox 、 Safari Chrome Opera 的所
有現(xiàn)代版本中都實(shí)現(xiàn)了這個(gè)方法。
IE8 及更早版本不支持 DOM 范圍,不過(guò)它們?cè)试S通過(guò)專有的 selection 對(duì)象操作選中的文本。如
本章前面所討論的,這個(gè) selection 對(duì)象是 document 的屬性。要取得富文本編輯器中選中的文本, 必須先創(chuàng)建一個(gè)文本范圍,然后再訪問(wèn)其 text 屬性:
let range = frames["richedit"].document.selection.createRange(); 
let selectedText = range.text;
使用 IE 文本范圍執(zhí)行 HTML 操作不像使用 DOM 范圍那么可靠,不過(guò)也是可以做到的。要實(shí)現(xiàn)與
使用 DOM 范圍一樣的高亮效果,可以組合使用 htmlText 屬性和 pasteHTML() 方法:
let range = frames["richedit"].document.selection.createRange(); 
range.pasteHTML( 
 '<span style="background-color:yellow">${range.htmlText}</span>');
以上代碼使用 htmlText 取得了當(dāng)前選區(qū)的 HTML ,然后用一個(gè) <span> 標(biāo)簽將其包圍起來(lái)并通過(guò)
pasteHTML() 再把它插入選區(qū)中。

到了這里,關(guān)于高級(jí)JavaScript。如何用JavaScript手?jǐn)]一個(gè)富文本編輯器?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 用QT/C++寫(xiě)一個(gè)簡(jiǎn)易文本編輯器

    用QT/C++寫(xiě)一個(gè)簡(jiǎn)易文本編輯器

    學(xué)習(xí)QT的小練習(xí),先看一下目前實(shí)現(xiàn)的效果。 ? 功能: 編輯文本保存為txt。 打開(kāi)一個(gè)txt文本文件,可編輯可保存。 文本編輯功能:剪切,復(fù)制,粘貼,加粗,斜體,下劃線,設(shè)置顏色,字體。 要點(diǎn): QT Designer的UI可視化設(shè)計(jì):基本控件布局,資源導(dǎo)入,菜單動(dòng)作,信號(hào)槽的

    2024年02月05日
    瀏覽(18)
  • Vue2 實(shí)現(xiàn)內(nèi)容拖拽或添加 HTML 到 Tinymce 富文本編輯器的高級(jí)功能詳解

    Vue2 實(shí)現(xiàn)內(nèi)容拖拽或添加 HTML 到 Tinymce 富文本編輯器的高級(jí)功能詳解

    在 Web 開(kāi)發(fā)中,Tinymce 被廣泛應(yīng)用作為富文本編輯器。除了基礎(chǔ)的文本編輯功能,Tinymce 還提供了一系列高級(jí)功能,使得文本編輯更加靈活和便捷。本文將介紹如何在 Tinymce 中實(shí)現(xiàn)一些高級(jí)功能,并深入了解每個(gè)工具的使用。 Tinymce 是一款基于 JavaScript 的富文本編輯器,支持豐

    2024年02月03日
    瀏覽(128)
  • 文本----簡(jiǎn)單編寫(xiě)文章的方法(中),后端接口的編寫(xiě),自己編寫(xiě)好頁(yè)面就上傳到自己的服務(wù)器上,使用富文本編輯器進(jìn)行編輯,想寫(xiě)好一個(gè)項(xiàng)目,先分析一下需求,再理一下實(shí)現(xiàn)思路,再搞幾層,配好參數(shù)校驗(yàn),lomb

    文本----簡(jiǎn)單編寫(xiě)文章的方法(中),后端接口的編寫(xiě),自己編寫(xiě)好頁(yè)面就上傳到自己的服務(wù)器上,使用富文本編輯器進(jìn)行編輯,想寫(xiě)好一個(gè)項(xiàng)目,先分析一下需求,再理一下實(shí)現(xiàn)思路,再搞幾層,配好參數(shù)校驗(yàn),lomb

    1.1 今天在編寫(xiě)代碼的時(shí)候,突然想實(shí)現(xiàn)一個(gè)目標(biāo):怎樣能夠在自己的網(wǎng)站上發(fā)一些文章 ?(lingyidianke.com) 1.2 參考自己之前寫(xiě)的一些資料,做一做試試,那么怎么做呢?首先,我們參考一下我們之前的資料,之前寫(xiě)過(guò)的大事件資料: 1.2.1 從項(xiàng)目結(jié)構(gòu)上看,我們要?jiǎng)?chuàng)兩個(gè)項(xiàng)目 1

    2024年02月19日
    瀏覽(27)
  • 【富文本編輯器實(shí)戰(zhàn)】02 編寫(xiě)編輯器配置文件

    【富文本編輯器實(shí)戰(zhàn)】02 編寫(xiě)編輯器配置文件

    本篇文章主要內(nèi)容是項(xiàng)目的配置文件的編寫(xiě)與講解,包括菜單項(xiàng)配置、語(yǔ)言配置、總體配置。 下圖是編輯器的總體結(jié)構(gòu): 編輯器大致可以分為兩個(gè)部分,菜單欄(圖中的 1)和下面的編輯器(圖中的 4)。其中菜單欄的內(nèi)容較多,每個(gè)菜單項(xiàng)都包含了圖標(biāo),說(shuō)明文字(圖中的 2)。部

    2024年01月21日
    瀏覽(23)
  • 【Electron】富文本編輯器之文本粘貼

    【Electron】富文本編輯器之文本粘貼

    由于這個(gè)問(wèn)題導(dǎo)致,從其他地方復(fù)制來(lái)的內(nèi)容 粘貼發(fā)送之后都會(huì)多一個(gè) 換行 在發(fā)送的時(shí)候如果直接,發(fā)送innerHTML 就 可以解決 Electron h5 Andriod 都沒(méi)問(wèn)題,但是 公司的 IOS 端 不支持,且不提供支持(做不了。)。 于是,繼續(xù)想辦法。 把單純的富文本插入操作,改一下,只粘

    2024年02月03日
    瀏覽(23)
  • 富文本編輯器

    富文本編輯器

    啥是富文本編輯器,就是下面這個(gè)東西: 1.那這玩意兒怎么安裝和配置: 2. 通過(guò)(在終端里輸入)? npm install?vue-quill-editor --save? 安裝 3.具體的在項(xiàng)目里的配置過(guò)程可以看最新的官方文檔vue-quill-editor · Quill官方中文文檔 · 看云 4.這里先簡(jiǎn)單說(shuō)下怎么配置,首先在main里輸入:

    2024年02月10日
    瀏覽(20)
  • Vim文本編輯器

    Vim文本編輯器

    目錄 一、Vim文本編輯器?? 1.1、什么是Vim文本編輯器 1.2、Vim文本編輯器基本格式 1.3、Vim的三種模式及切換 ?二、命令模式 2.1、Vim的進(jìn)入與退出 2.2、命令模式下光標(biāo)跳轉(zhuǎn)的快捷鍵 2.3、常用命令集合 三、編輯模式 四、末行模式 Linux 系統(tǒng)中“一切皆文件”,因此當(dāng)我們要更改

    2024年02月10日
    瀏覽(28)
  • dede編輯器修改成純文本編輯器的方法

    dede編輯器修改成純文本編輯器的方法

    我在做優(yōu)秀啦網(wǎng)站大全的時(shí)候需要的正文內(nèi)容都不需要設(shè)置什么文字樣式,所以我需要把編輯器上的工具全部取消掉,包括會(huì)員投稿中的編輯器工具欄全部取消掉或者屏蔽隱藏掉,所以我需要把DEDE編輯器修改成純文本編輯器的方法如下: 如圖: 首先打開(kāi) /include/ckeditor/ckedi

    2024年02月16日
    瀏覽(24)
  • 【富文本編輯器實(shí)戰(zhàn)】04 菜單組件和編輯器的整合

    【富文本編輯器實(shí)戰(zhàn)】04 菜單組件和編輯器的整合

    在上一篇文章中,我們對(duì)整個(gè)編輯器項(xiàng)目的大體結(jié)構(gòu)有了一定的了解,主要分為菜單欄和編輯區(qū)。菜單欄包括了編輯器的主要文本操作功能,且菜單項(xiàng)是可配置的。編輯器界面顯示比較簡(jiǎn)單,是一個(gè)可編輯的 div 區(qū)域。接下來(lái)我們就來(lái)把編輯器的整體框架搭建起來(lái),讓其可以

    2024年01月24日
    瀏覽(38)
  • 15 文本編輯器vim

    15 文本編輯器vim

    ? ? ? ? 如果file.txt就是修改這個(gè)文件,如果不存在就是新建一個(gè)文件。 ?????????使用vim建完文件后,會(huì)自動(dòng)進(jìn)入文件中。? ????????底部要是顯示插入,是編輯模式; ????????按esc,底部要是空白的,則是進(jìn)入命令模式,可以輸入一些快捷鍵進(jìn)行操作,比如說(shuō)

    2024年02月15日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包