10行代碼實現實時Html編輯器

2020-12-16 蟲蟲搜奇

很多人可能都用過Web編輯器,比如Ckedit等,除了Word等本地編輯器外Web編輯器也是最常用最方便Web內容來源。這些在線編輯器的一個短板限制很多,不能實時反饋在線效果。本文蟲蟲給大家介紹一種很簡單的無限制在線Html編輯器,實現所寫即所得UI和樣式實時刷新,JS代碼也能進行熱加載執行重新渲染,而且這些實現都非常簡單,只用到了很少的html和css代碼。

Html內容可編輯—contenteditable

要使Html可以編輯實際上很簡單只要一個body標籤就足矣。contenteditable這個body屬性可能鮮為人知,實際上它的功能就是實現Html文檔可編輯。我們新建一個Html文檔(Cc.html),然後將如下代碼複製粘貼到文檔中:

<body contenteditable="true"></body>

通過瀏覽器打開這個文檔,怎麼樣,神奇的事情發生了把?

你可以在這個頁面任意輸入文本甚至還可以粘貼圖片。(兼容基本上所有的瀏覽器,IE也可以)。還可以支持Ctr+Z撤銷和重做。

<style>…</style>樣式實時變化

我們知道<div>…</div>和<p>…</p>標籤內的文字都會在頁面顯示,而<script>…</script>和<style>…</style>中的都是引用的前端腳本的代碼(JS)等需要通過瀏覽器引擎執行渲染顯示出來的,那麼這些代碼是不是可以在顯示出來呢?實際上在大多數瀏覽器只是通過CSS樣式隱藏起來的,我們通過重寫在div>…</div>中增加script, style { display: block; }即可:

<body>

<style>

script, style { display: block; }

</style>

<script>

console.log("Hello Chongchong!");

</script>

</body>

通過將其粘貼到html文件並在瀏覽器中打開它,顯示如下:

而且,我們也可以將這個頁面也設置為contenteditable,並且<style></ style>增加樣式顯示,比如我們修改字體的大小為20pt,顏色為綠色:

<body contenteditable="true">

<style>

script, style { display: block;font-size: 20pt;color: green}

</style>

<script>

console.log("Hello ChongChong!");

</script>

</body>

現在我們可以,通過在線編輯style{}的內容,讓頁面的呈現實時變化,比如字體再增加10pt,顏色變成藍色。

注意,輸入時候內容會實時變化的,比如你修改20pt為30pt途中,你字體會變成2,很小很小,繼續刪除2就會恢復成默認正常默認,你不用理會繼續輸入30字體就會變成30pt,其他參數也類似。

該方法可以實時刷新樣式顯示<style></ style>標籤,對於JS代碼,由於其只會在頁面加載時候執行一次,你可以修改<script>…</script>內容,但是不能實時執行生效。

JS代碼熱加載

上面我也說,JS代碼的修改需要重新加載才能執行。為了實現重新加載,我們首先使用簡單的按鍵(Shift+enter)觸發重新加載的方法:

<body contenteditable="true">

<style>

script, style { display: block;font-size: 20pt; color: green}

</style>

<script>

//alert("Hello ChongChong!");

document.onkeydown = function(e) {

var key = window.event ? event : e;

if (key.shiftKey && key.keyCode == 13) {

eval(window.getSelection().focusNode.parentNode.innerHTML);

}

};

</script>

</body>

通過瀏覽器打開,並且編輯去掉//alert("Hello ChongChong!")前面的//注釋,然後按鍵shift時按Enter鍵。

結果如上圖就可以彈出一個消息窗口。

基礎模版和完善

通過上面的方法我們實現了一個可編輯上面在線編輯器。在前面代碼的基礎上,我們提供一個基礎的模版供大家使用,完整代碼如下:

<body contenteditable="true" spellcheck="false">

<title>editor</title>

<style>script,

style {

display: block;

white-space: pre-wrap;

background-color: #eeeeee;

border: solid;

border-radius: 10px;

padding: 20px;

}

body {

font-family: Menlo, Monaco, monospace;

font-size: 12pt;

tab-size: 4;

}

script.success {

background-color: #ccffcc;

border: solid, #00cc00;

}

script.error {

background-color: #ffcccc;

border: solid, #ff1111;

}

</style>

<script type="text/javascript">

//alert("Hello Chongchong!");

document.onkeydown = function(e) {

var key = window.event ? event : e;

var node = window.getSelection().focusNode;

if (key.shiftKey) {

if (key.keyCode == 13) {

node.parentNode.classList.remove("error");

node.parentNode.classList.remove("success");

try {

eval(node.parentNode.innerHTML);

node.parentNode.classList.add("success");

} catch (e) {

node.parentNode.classList.add("error");

}

return false;

}

} else {

if (key.keyCode == 13) {

document.execCommand("insertHTML", false, "\n");

return false;

}

if (key.keyCode == 9) {

document.execCommand("insertHTML", false, "\t");

return false;

}

}

}

</script>

</body>

將上面代碼保存為html,然後用瀏覽器打開就實現了一個簡單的在線html編輯器。

完善功能

該在線編輯器模版還非常簡陋,如果能增加語法高亮和自動完成等一些功能可能很好,但是這是很大工作量,有興趣的可以嘗試著做下。也可以通過引入一些第三方的庫來做下,比如使用微軟的language-server-protocol 庫來實現自動完成功能。

至於語法高亮,一般做法是將所有內容填充到標籤中並對其進行著色(大多數其他基於html的編輯器都這樣做),但是這樣會破壞自動刷新和熱加載功能的簡單性。

完善內容

你可能還希望處理實際內容,而不僅僅是編輯本身。這個簡單,只需在contenteditable body中添加另一個元素,該操作可以通過JS腳本實現該操作。還可以添加更多元素,例如一個按鈕或者只是通過修改快速HTML框來實現。這些都可以在提供的模版的基礎上按需增加修改。

總結

本文我們在contenteditable屬性的基礎上實現了,在線Html的編輯器實現內容和樣式的實時更新、實現了JS代碼的熱加載。雖然此在線編輯器還非常簡陋,但是以此作為一個想法和基礎"拋磚引玉",希望大家可以實現一個功能完善,更加實用的在線編輯器。

相關焦點

  • 60行Python代碼開發在線markdown編輯器
    而在今天的教程內容中,我將帶大家學習Dash中實用的一些基礎性的「靜態部件」,它們可以幫助我們打造更加正式的web應用,並在最後教大家如何僅僅60行代碼就開發出一個在線markdown編輯器。圖9有時候我們需要構造出一個能供用戶輸入大段文字的輸入框,譬如很多的在線編輯器,而在Dash中我們可以使用dash_core_components中的Textarea()來實現這個功能,並且
  • 2021年 Linux 上最佳 C/C++ IDE 和代碼編輯器
    往期精選學習C語言編程看這篇就夠了,信息量很大,建議收藏【置頂】十大排序算法,來這看看-基本思想+動畫演示+C語言實現【置頂】C語言數據結構課程設計-停車場管理【附源碼】【置頂】一個好玩的小遊戲(純C語言編寫)【置頂】10分鐘,快速掌握C語言指針【必讀】8個基礎且實用的
  • HTML代碼
    我們相信,使用一款簡單的文本編輯器是學習 HTML 的好方法。通過記事本,依照以下四步來創建您的第一張網頁。<html> 元素:<html> <body><p>This is my first paragraph.</p></body> </html><html> 元素定義了整個 HTML 文檔。
  • 6個HTML5 編輯器推薦
    Mercury 是由CoffeeScript代碼編寫,其支持所有的主流瀏覽器。Website/Downoad2 Aloha Editor – HTML5 WYSIWYG EditorAloha Editor 是個基於瀏覽器的富文本編輯器框架,JavaScript創建。不像其他大多數的HTML編輯器,Aloha可以被嵌入到CMS、Blog,及其他標準的web開發框架中。
  • 淺淡代碼開發編輯器Sublime,Atom,Brackets區別及使用體驗
    有時作為開發人員很糾結哪個編輯器更好用選擇哪款軟體來開發。作為程序開發10年的老程序猿,經歷了前端開發和後端開的經驗,在使用編輯工具了給大家介紹一下有哪些工具和使用感受,如何根據自己的情況選擇合適的開發編輯器工具?代碼編輯器有哪些?
  • 9個最好用的JavaScript開發工具和代碼編輯器
    這款JavaScript編輯器提供了像代碼完成、語法高亮和內容概要等功能,可幫助開發人員高效地創建JavaScript代碼。官方網站:http://spket.com/2)IxeditIxEdit是一款面向網站的基於JavaScript的互動設計工具。
  • 僅一行代碼,打造一個在線編輯器 - OSCHINA - 中文開源技術交流社區
    不一樣的地方,技術宅崇尚極致,喜歡極簡,又希望簡約不簡單,背後就是技術宅滿心思的不斷的嘗試,我正在看著一齣好戲在上演: " 程式設計師 Jose Jesus Perez Aguinaga 在 CoderWall 分享了一個小技巧:在瀏覽器地址欄中輸入一行代碼:data:text/html, <html contenteditable>
  • HTML 超好用的編輯器推薦
    可以使用專業的 HTML 編輯器來編輯 HTML,菜鳥教程為大家推薦幾款常用的編輯器:Notepad++:https://notepad-plus-plus.org
  • 免費/開源/輕量級的網頁代碼編輯器推薦(Mac/Win)
    我們在做網站的時候,經常會修改PHP、js,css,html文件,這些文件裡雖然保存的都是文本信息,但是,不能直接用作業系統默認的文本編輯器 修改,因為這種文件裡除了有能看到的文字以外,還有一些其他信息,比如編碼。如果用系統自帶的文本編輯器修改保存後,這些隱藏信息會丟失,文件代碼雖然看上去一樣,但是上傳到伺服器上,會導致網站出錯。
  • Tumult Whisk for mac(HTML和PHP編輯器)
    Tumult Whisk是一個輕量級的HTML和PHP編輯器,具有實時預覽,可在您鍵入時更新。Whisk是您工具包中用於HTML,PHP,CSS和javascript編程的必備應用程式。這對於學習Web開發,測試代碼段或構建整個網頁非常有用。
  • 15 款Python編輯器的優缺點,別再問我「選什麼編輯器」啦!
    本質上,IDE 是一種改進代碼創建、測試和 debug 流程的工具,它使這些工作更加簡單。有一個與 IDE 相似的術語——代碼編輯器(code editor)。我們先來探討二者的異同。什麼是代碼編輯器?代碼編輯器是一個能夠突出顯示語法和安排代碼版式的文本編輯器。高級代碼編輯器可以開發和修改代碼。IDE 和代碼編輯器有哪些共同優點?
  • HTML5 教程/資料-01-簡介和編輯器、編碼介紹
    </p> </body></html>HTML 編輯器推薦可以使用專業的 HTML 編輯器來編輯 HTML,本教程為大家推薦幾款常用的編輯器:你可以從以上軟體的官網中下載對應的軟體,按步驟安裝即可。接下來我們將為大家演示如何使用 VS Code 工具來創建 HTML 文件。
  • 推薦幾款好用的markdown編輯器
    格式轉換方便,還可以輕鬆地將文本轉換為 html、pdf等。,支持實時預覽,但是僅支持 蘋果作業系統,可以說是目前最好用的免費 Markdown 編輯器,對漢字兼容性非常好。,開源免費,支持windows、蘋果、linux多種系統平臺,提供實時 HTML 預覽、數學表達式、代碼高亮和PDF導出。
  • 親測好用:表格Table的html代碼轉Markdown語法工具
    Markdown是現在很火的編輯器語法,像簡書、雲棲社區、掘金等很多社區都支持Markdown,如果是簡單的table表格代碼手動寫一下就行了,但是表格html代碼太長了,一個個寫真的太麻煩了(不清楚Markdown表格語法的同學可以參考文章底部),新手站長網分享一個html轉Markdown
  • 18款適用於開發人員的網頁代碼編輯器
    本文介紹18款極具價值的網頁代碼編輯器。1.CodeanywhereKodingen是一種在線開發環境,在線代碼編輯器,基於網頁的代碼編輯器。5.EcoderEcoder是基於網頁的代碼編輯器,它包含了一個文件瀏覽器、文件上傳器、tabbed系統,支持同時編輯多個文件。這個web應用程式方便開發人員直接在線編輯代碼,支持實時的語法高亮。6.
  • html代碼
    <meta name="GENERATOR" content="Microsoft FrontPage 5.0"> 這隻表示該網頁由什麼編輯器寫的。 <meta http-equiv="refresh" content="10; url=http://www.hkiwc.com"> 這行較為實用,能於預定秒數內自動轉到指定網址。原代碼中 10 表示 10秒。 2,怎麼改變滾動條的顏色,只有ie5.5版本以上才能支持。
  • 5款最受Python開發者歡迎的Python IDE和代碼編輯器
    使用這些代碼編輯器,您可以導入庫,框架和編寫代碼。即使我們經歷了那些IDE,Python代碼編輯器也有自己的位置。沒有Python中的代碼編輯器,大多數開發人員將不會學習或理解語法和代碼片段。因此,讓我們看看什麼是頂級Python代碼編輯器。
  • Div+css教程之製作html的工具
    fw具體使用在這裡ahuing就不介紹了,有興趣的朋友在網上bd一下吧2.編輯器編輯器的選擇就很多了,最簡單的就一個記事本就可以,另外還有Notepad++、UltraEdit、dw(dreamweaver)、phpdesigner等,但是要提高編寫效率還是用dw或者phpdesigner,兩者都有代碼提示功能(其它的編輯器也有
  • 打造一款基於monaco-editor及markdown-it的Markdown編輯器(上)
    前言本文的 Markdown 編輯器主要是 Monaco editor + markdown-it 實現 markdown 編輯以及預覽,目前實現了:文章複製功能;Markdown 轉 html 基本樣式;自定義 table 插件以及 h 標籤插件
  • 新版Kite:實時補全代碼,Python 之父都發聲力挺!
    雷鋒網(公眾號:雷鋒網) AI 開發者按:不久前,一個免費的專門針對 Python 的代碼補全工具 Kite,有了新的動態。這次,Kite 開發者在之前的基礎上,增加了「Intelligent Snippets」功能。它可以幫助廣大開發者在敲代碼時,實時生成與上下文相關的代碼片段。