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

前端 富文本編輯器原理——從javascript、html、css開始入門

這篇具有很好參考價(jià)值的文章主要介紹了前端 富文本編輯器原理——從javascript、html、css開始入門。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


html 富文本 編輯,web站點(diǎn),前端,javascript,html,富文本編輯器,原力計(jì)劃

?前言

大家好,我是yma16,本文分享關(guān)于前端 富文本編輯器原理——從javascript、html、css開始。
富文本編輯器
富文本編輯器是指具有格式化文本和圖像編輯功能的文本編輯器

參考文檔:https://w3c.github.io/selection-api/#abstract

?html的contenteditable屬性

全局屬性 contenteditable 是一個(gè)枚舉屬性,表示元素是否可被用戶編輯。如果可以,瀏覽器會(huì)修改元素的組件以允許編輯。

  • contenteditable boolean (false | true) 默認(rèn)false
    簡(jiǎn)單理解,加上contenteditable ,html可以編輯具有input 輸入的基本功能,所見即所得。
    例:
    html demo 標(biāo)簽配置contenteditable
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>富文本編輯器</title>
	</head>
	<style>
		blockquote {
		  background: #eee;
		  border-radius: 5px;
		  margin: 16px 0;
		}
		
		blockquote p {
		  padding: 15px;
		}
		
		cite {
		  margin: 16px 32px;
		  font-weight: bold;
		}
		
		blockquote p::before {
		  content: '\201C';
		}
		
		blockquote p::after {
		  content: '\201D';
		}
		
		[contenteditable='true'] {
		  caret-color: red;
		}

	</style>
	<body>
		<blockquote contenteditable="true">
		  <p>Edit this content to add your own quote</p>
		</blockquote>
		
		<cite contenteditable="true">-- Write your own name here</cite>

	</body>
</html>

效果如下,可以輸入編輯html元素:
html 富文本 編輯,web站點(diǎn),前端,javascript,html,富文本編輯器,原力計(jì)劃

?? 輸入的光標(biāo)位置(瀏覽器獲取selection)

getSelection() method
GetSelection ()方法返回一個(gè) Selection 對(duì)象,該對(duì)象表示用戶選擇的文本范圍或插入符號(hào)的當(dāng)前位置。

?使用Selection.toString () 返回指定的文本

例:

<body>
	<blockquote contenteditable="true">
	  <p>Edit this content to add your own quote</p>
	</blockquote>
	
	<cite contenteditable="true">-- Write your own name here</cite>
	<button onclick="printSelection()">console.log(getSelection)</button>

</body>
<script type="text/javascript">
	const printSelection=()=>{
		const selection=window.getSelection()
		console.log('selection',selection)
		console.log('selection.toString()',selection.toString())
	}
</script>

效果如下:
html 富文本 編輯,web站點(diǎn),前端,javascript,html,富文本編輯器,原力計(jì)劃

?getRangeAt 獲取指定索引范圍

函數(shù)接受一個(gè)索引值
返回,其中
結(jié)束的索引值,endOffset
開始的索引值,startOffset
效果如下圖:
html 富文本 編輯,web站點(diǎn),前端,javascript,html,富文本編輯器,原力計(jì)劃

?? 修改光標(biāo)位置

調(diào)用 setStart() 和 setEnd() 方法,來(lái)修改一個(gè)光標(biāo)的位置或拖藍(lán)范圍
Range.setStart()
Range.setStart() 方法用于設(shè)置 Range的開始位置。

如果起始節(jié)點(diǎn)類型是 Text、Comment 或 CDATASection之一,那么 startOffset 指的是從起始節(jié)點(diǎn)算起字符的偏移量。對(duì)于其他 Node 類型節(jié)點(diǎn),startOffset 是指從起始結(jié)點(diǎn)開始算起子節(jié)點(diǎn)的偏移量。

如果設(shè)置的起始位點(diǎn)在結(jié)束點(diǎn)之下(在文檔中的位置),將會(huì)導(dǎo)致選區(qū)折疊,起始點(diǎn)和結(jié)束點(diǎn)都會(huì)被設(shè)置為指定的起始位置。
startNode
startNode 用于設(shè)定 Range的起始位置。

startOffset
必須為不小于 0 的整數(shù)。表示從startNode的開始位置算起的偏移量。
Range.setEnd()
Range.setEnd()
方法用于設(shè)置 Range的結(jié)束位置。

如果結(jié)束節(jié)點(diǎn)類型是 Text、Comment 或 CDATASection之一,那么 endOffset 指的是從結(jié)束節(jié)點(diǎn)算起字符的偏移量。對(duì)于其他 Node 類型節(jié)點(diǎn),endOffset 是指從結(jié)束結(jié)點(diǎn)開始算起子節(jié)點(diǎn)的偏移量。

如果設(shè)置的結(jié)束點(diǎn)在起始點(diǎn)之上(在文檔中的位置),將會(huì)導(dǎo)致選區(qū)折疊,起始點(diǎn)和結(jié)束點(diǎn)都會(huì)被設(shè)置為指定的結(jié)束位置。
endNode
endNode用于設(shè)定 Range的結(jié)束位置。

endOffset
必須為不小于 0 的整數(shù)。表示從endNode的結(jié)束位置算起的偏移量。
語(yǔ)法

range.setStart(startNode, startOffset);
range.setEnd(endNode, endOffset);

例:
點(diǎn)擊不失去焦點(diǎn)跳轉(zhuǎn)開始和結(jié)束,避免失去焦點(diǎn)使用preventDefault

<body>
	<blockquote contenteditable="true">
		<p>Edit this content to add your own quote</p>
	</blockquote>

	<cite contenteditable="true">-- Write your own name here</cite>
	<button onclick="printSelection()">console.log(getSelection)</button>
	<button id='start-id'>jumpt start</button>
	<button id='end-id'>jumpt end</button>


</body>
<script type="text/javascript">
	function printSelection() {
		const selection = window.getSelection()
		console.log('selection', selection)
		console.log('selection.toString()', selection.toString())
		console.log('selection.getRangeAt(0)', selection.getRangeAt(0))
	}

	function jumpStart() {
		let range = window.getSelection().getRangeAt(0);
		let textEle = range.commonAncestorContainer;
		range.setStart(range.startContainer, 0);
		range.setEnd(range.startContainer, 0);
	}

	function jumpEnd() {
		let range = window.getSelection().getRangeAt(0);
		let textEle = range.commonAncestorContainer;
		range.setStart(range.startContainer, textEle.length);
		range.setEnd(range.endContainer, textEle.length);
	}
	window.onload = function() {
		document.getElementById('start-id').addEventListener('click', function(e) {
			jumpStart()
		})
		document.getElementById('start-id').addEventListener('mousedown', function(e) {
			e.preventDefault()
		})
		
		document.getElementById('end-id').addEventListener('click', function(e) {
			jumpEnd()
		})
		document.getElementById('end-id').addEventListener('mousedown', function(e) {
			e.preventDefault()
		})
	}
</script>

效果如下圖:
html 富文本 編輯,web站點(diǎn),前端,javascript,html,富文本編輯器,原力計(jì)劃

?? 設(shè)置選取range

Selection.addRange()
概述
向選區(qū)(Selection)中添加一個(gè)區(qū)域(Range)。

語(yǔ)法

sel.addRange(range)

例子:
失去焦點(diǎn)之后恢復(fù)選區(qū)

<body>
	<blockquote contenteditable="true">
		<p>Edit this content to add your own quote</p>
		<b>yma16</b>
	</blockquote>

	<cite contenteditable="true">-- Write your own name here</cite>
	<br>
	<button id='print-id'>console.log(getSelection)</button>
	<br>
	<br>
	<button id='start-id'>jump start</button>
	<button id='end-id'>jump end</button>
	<button id='focus-id'>focus content</button>


</body>
<script type="text/javascript">
	const config = {
		selection: null
	}

	function printSelection() {
		const selection = window.getSelection()

		range = document.getSelection().getRangeAt(0).cloneRange();
		config.cloneRange = range;
		console.log('selection', selection)
		// console.log('selection.toString()', selection.toString())
		// console.log('selection.getRangeAt(0)', selection.getRangeAt(0))
	}

	function jumpStart() {
		let range = window.getSelection().getRangeAt(0);
		let textEle = range.commonAncestorContainer;
		range.setStart(range.startContainer, 0);
		range.setEnd(range.startContainer, 0);
		range = document.getSelection().getRangeAt(0).cloneRange();
		config.cloneRange = range;
	}

	function jumpEnd() {
		let range = window.getSelection().getRangeAt(0);
		let textEle = range.commonAncestorContainer;
		range.setStart(range.startContainer, textEle.length);
		range.setEnd(range.endContainer, textEle.length);
		range = document.getSelection().getRangeAt(textEle.length).cloneRange();
		config.cloneRange = range;
	}

	function focusContent() {
		document.getSelection().removeAllRanges(); //把沒用的Ranges刪除
		console.log('config.cloneRange',config.cloneRange)
		document.getSelection().addRange(config.cloneRange); //恢復(fù)Range
	}
	window.onload = function() {
		document.getElementById('print-id').addEventListener('click', function(e) {
			printSelection()
		})
		document.getElementById('print-id').addEventListener('mousedown', function(e) {
			e.preventDefault()
		})
		document.getElementById('start-id').addEventListener('click', function(e) {
			jumpStart()
		})
		document.getElementById('start-id').addEventListener('mousedown', function(e) {
			e.preventDefault()
		})

		document.getElementById('end-id').addEventListener('click', function(e) {
			jumpEnd()
		})
		document.getElementById('end-id').addEventListener('mousedown', function(e) {
			e.preventDefault()
		})
		document.getElementById('focus-id').addEventListener('click', function(e) {
			focusContent()
		})
		document.getElementById('focus-id').addEventListener('mousedown', function(e) {
			e.preventDefault()
		})
	}
</script>

效果如下:
html 富文本 編輯,web站點(diǎn),前端,javascript,html,富文本編輯器,原力計(jì)劃

?總結(jié)

Contenteditable屬性
Contenteditable是一種HTML屬性,用于指定頁(yè)面中的元素是否可以編輯。以下是Contenteditable的總結(jié):

  1. Contenteditable屬性可以應(yīng)用于HTML元素上,如div、span、p、h1等等。

  2. 當(dāng)Contenteditable屬性設(shè)置為true時(shí),用戶可以編輯元素內(nèi)的文本、圖像等內(nèi)容。

  3. Contenteditable屬性的取值包括true和false,分別表示可編輯和不可編輯。

  4. Contenteditable屬性可以通過JavaScript來(lái)動(dòng)態(tài)修改。

  5. Contenteditable屬性的兼容性很好,支持大多數(shù)現(xiàn)代瀏覽器。

  6. 雖然Contenteditable屬性很方便,但也存在一些潛在的安全問題,因此應(yīng)該謹(jǐn)慎使用。

富文本編輯器

富文本編輯器是一種允許用戶編輯帶有樣式和格式的文本的編輯器。它與普通文本編輯器的區(qū)別在于,它允許用戶使用各種字體、顏色、大小、加粗、斜體、下劃線、超鏈接、圖片等來(lái)設(shè)計(jì)和呈現(xiàn)文本內(nèi)容。其原理主要包括以下幾個(gè)方面:

  • DOM操作:富文本編輯器通過操作DOM樹來(lái)實(shí)現(xiàn)文本樣式和格式的改變。當(dāng)用戶在編輯器中輸入或選擇文本時(shí),編輯器會(huì)將文本轉(zhuǎn)換為DOM節(jié)點(diǎn),并將節(jié)點(diǎn)添加到DOM樹中。通過對(duì)DOM節(jié)點(diǎn)的增刪改查,實(shí)現(xiàn)對(duì)文本樣式和格式的修改操作。

  • 事件監(jiān)聽:通常情況下,富文本編輯器會(huì)監(jiān)聽用戶的輸入事件、鼠標(biāo)點(diǎn)擊事件和鍵盤事件等,以便及時(shí)捕捉用戶的操作并做出相應(yīng)的反應(yīng)。

  • 樣式和格式化:富文本編輯器通常內(nèi)置了樣式和格式化工具,比如字體、顏色、大小、加粗、斜體、下劃線、超鏈接等,可以通過這些工具來(lái)控制文本的樣式和格式。

  • 插件和組件:富文本編輯器可以通過插件和組件來(lái)擴(kuò)展其功能,比如圖片上傳組件、表格插件、代碼高亮插件等,可以讓編輯器滿足更多的需求。

?結(jié)束

本文分享到這結(jié)束,如有錯(cuò)誤或者不足之處歡迎指出!
html 富文本 編輯,web站點(diǎn),前端,javascript,html,富文本編輯器,原力計(jì)劃

?? 點(diǎn)贊,是我創(chuàng)作的動(dòng)力!
?? 收藏,是我努力的方向!
?? 評(píng)論,是我進(jìn)步的財(cái)富!
?? 感謝你的閱讀!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-712938.html

到了這里,關(guān)于前端 富文本編輯器原理——從javascript、html、css開始入門的文章就介紹完了。如果您還想了解更多內(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)文章

  • 使用 HTML、CSS 和 JavaScript 創(chuàng)建實(shí)時(shí) Web 編輯器

    使用 HTML、CSS 和 JavaScript 創(chuàng)建實(shí)時(shí) Web 編輯器

    在本文中,我們將創(chuàng)建一個(gè)實(shí)時(shí)網(wǎng)頁(yè)編輯器。這是一個(gè) Web 應(yīng)用程序,允許我們?cè)诰W(wǎng)頁(yè)上編寫 HTML 、 CSS 和 JavaScript 代碼并實(shí)時(shí)查看結(jié)果。這是學(xué)習(xí) Web 開發(fā)和測(cè)試代碼片段的絕佳工具。我們將使用 iframe 元素來(lái)顯示結(jié)果。 iframe 元素用于在當(dāng)前 HTML 文檔中嵌入另一個(gè)文檔。 i

    2024年02月12日
    瀏覽(30)
  • 前端必備14款業(yè)界受歡迎的富文本編輯器

    前端必備14款業(yè)界受歡迎的富文本編輯器

    基于JavaScript和css開發(fā)的 Web富文本編輯器, 輕量、簡(jiǎn)潔、開源免費(fèi)。 一個(gè)輕量級(jí)的基于瀏覽器的所見即所得編輯器,由JavaScript寫成。 由百度web前端研發(fā)部開發(fā)所見即所得富文本web編輯器,可定制,注重用戶體驗(yàn)等特點(diǎn),開源基于MIT協(xié)議,允許自由使用和修改代碼。 一套開源

    2024年02月15日
    瀏覽(36)
  • Vue 富文本編輯器tinymce的安裝教程(前端必備小知識(shí))

    Vue 富文本編輯器tinymce的安裝教程(前端必備小知識(shí))

    目錄 一、Tinymce編輯器簡(jiǎn)介 二、安裝以及配置tinymce ????????2.1.安裝tinymce編輯器 ????????2.2.從node_modules/tinymce復(fù)制樣式到public目錄下,復(fù)制完畢的public下的目錄結(jié)構(gòu)如下 三、在Vue里面使用 ????????3.1.在components 目錄下新建 Editor.vue 將下面代碼復(fù)制進(jìn)去 ???????

    2024年02月11日
    瀏覽(98)
  • uniapp小程序開發(fā)-富文本編輯器mp-html,juice外部樣式轉(zhuǎn)內(nèi)聯(lián)樣式

    uniapp小程序開發(fā)-富文本編輯器mp-html,juice外部樣式轉(zhuǎn)內(nèi)聯(lián)樣式

    在開發(fā)一款公司的小程序過程中,有一個(gè)需求:web端后端可以上傳word文檔,后端轉(zhuǎn)為html字符串;小程序接收顯示,并且可以在小程序進(jìn)行編輯修改。 其實(shí)在日常小程序中很少見到富文本編輯器的使用,所以這次使用的過程中也嘗試了多種,但是最好用的還是mp-html 這款插件

    2024年02月09日
    瀏覽(27)
  • 基于前端技術(shù)原生HTML、JS、CSS 電子病歷編輯器源碼

    基于前端技術(shù)原生HTML、JS、CSS 電子病歷編輯器源碼

    電子病歷系統(tǒng)采取結(jié)構(gòu)化與自由式錄入的新模式,自由書寫,輕松錄入。實(shí)現(xiàn)病人醫(yī)療記錄(包含有首頁(yè)、病程記錄、檢查檢驗(yàn)結(jié)果、醫(yī)囑、手術(shù)記錄、護(hù)理記錄等等。)的保存、管理、傳輸和重現(xiàn),取代手寫紙張病歷。不僅實(shí)現(xiàn)了紙質(zhì)病歷的電子化儲(chǔ)存,而且實(shí)現(xiàn)了病歷的

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

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

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

    2024年02月03日
    瀏覽(127)
  • vue-codemirror實(shí)現(xiàn)一個(gè)前端代碼在線編輯器,可處理 HTML,VUE,JS,CSS代碼在線編輯

    vue-codemirror實(shí)現(xiàn)一個(gè)前端代碼在線編輯器,可處理 HTML,VUE,JS,CSS代碼在線編輯

    先找個(gè)目錄創(chuàng)建一個(gè)vue項(xiàng)目 例如 我們想要項(xiàng)目叫 editor 在終端執(zhí)行 2和3其實(shí)都可以 但個(gè)人建議 最近還是2會(huì)更穩(wěn)定一些 在終端執(zhí)行 引入依賴包 然后在項(xiàng)目src目錄下創(chuàng)建 utils 文件夾 里面創(chuàng)建一個(gè)setting.js 參考代碼如下 然后 這邊 調(diào)用組件的代碼 因?yàn)轫?xiàng)目也剛創(chuàng) 我直接寫 s

    2024年02月15日
    瀏覽(32)
  • wangEditor富文本編輯器的調(diào)用開發(fā)實(shí)錄2(V5版本自定義粘貼,去除復(fù)制word或網(wǎng)頁(yè)html冗余樣式代碼的解決方案)

    wangEditor富文本編輯器的調(diào)用開發(fā)實(shí)錄2(V5版本自定義粘貼,去除復(fù)制word或網(wǎng)頁(yè)html冗余樣式代碼的解決方案)

    在使用wangEditor富文本編輯器時(shí),當(dāng)從word文檔或者其他網(wǎng)頁(yè)復(fù)制文本內(nèi)容粘貼到編輯器中,如果不過濾掉復(fù)制文本中自帶的樣式,會(huì)導(dǎo)致復(fù)制的內(nèi)容比較錯(cuò)亂,甚至無(wú)法添加到數(shù)據(jù)庫(kù)中。為了解決這個(gè)問題,我們需要對(duì)從word中粘貼的內(nèi)容進(jìn)行處理,把多余的代碼剔除,讓粘貼

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

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

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

    2024年01月21日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包