The Native-First, High-Performance Markdown Plugin for JavaScript
Markdown text editor plugin that transforms a native textarea into a full editing suite. WYSIWYG and plain Markdown modes, live preview, RTL support, dark mode. Works with Django, HTMX, Laravel, React, and any stack.
理念:“本土第一”
大多數編輯器都打破了標準的網路工作流程。 MarkdownEditor 擁抱它。
由於它直接位於 之上,因此您無需學習處理資料的新方法。
- 無需資料綁定:開箱即用
- 標準存取:像普通輸入一樣使用
document.getElementById('editor').value。 - 與後端無關:可與任何後端(Python、Node.js、PHP 等)配合使用,就像普通表單欄位一樣
主要特點
🖼️ 高級圖像上傳(SEO 優化)
不要使用大量的 Base64 字串來使資料庫膨脹。配置我們的 API 以將圖像直接上傳到您的伺服器或 S3 儲存桶。編輯器接收 URL,讓您的 Markdown 文件保持簡潔,並保持網站的 SEO 排名較高。
🔀 混合模式和普通模式
為您的用戶提供兩全其美的服務。在用於輕鬆格式化的視覺 (WYSIWYG) 混合模式和用於無幹擾的原始語法編輯的純 Markdown 模式之間切換。
🌍 全球就緒,支援 RTL
對從右到左 (RTL) 語言的完全本機支援。非常適合需要阿拉伯語、烏爾都語或波斯語支援並具有自動文字方向對齊功能的項目。
⚡ 大規模性能
- 輕量級:佔用空間約 116KB,不會減慢頁面載入速度
- 大文件支援:經過最佳化,可以處理數千行文本,而不會出現輸入延遲或瀏覽器凍結的情況
- 智慧型渲染:去抖動預覽更新、快取樣式計算以及清單延續與縮排之間的無衝突鍵盤處理 - 因此 Tab 和 Enter 總是只做一件事
♿ 預設可訪問
內建完整的 ARIA 支持,無需額外配置。工具列是一個適當的 role="toolbar" 地標,預覽窗格是一個帶有標籤的 role="region",所有 SVG 圖標都對屏幕閱讀器隱藏,預覽切換通過 aria-pressed 顯示其開/關狀態,禁用的工具列按鈕模態框關閉時將焦點回到觸發按鈕。
🛡️ 零 CSS 衝突
所有編輯器樣式都完全限定在 .markdown-editor-wrapper 元素範圍內。 Tailwind 的全域預檢(h1–h6、a、button 等的元素重置)被排除在外,因此編輯器可以與 Bootstrap、Tailwind 或同一頁面上的任何其他 CSS 框架一起使用,而不會破壞單一樣式。
🔒 XSS 安全預覽
渲染的預覽在寫入 DOM 之前會透過 DOMPurify 進行清理。精心設計的 Markdown 輸入中的腳本標籤、內聯事件處理程序和惡意 URL 都會自動刪除——無需配置。
Markdown 編輯器演示
快速實施
1. 安裝
您可以使用NPM安裝,直接匯入JavaScript文件,或使用CDN進行快速部署。
透過 NPM 安裝
npm install markdown-text-editor |
使用 CDN
或者,在您的 HTML 中包含以下 CDN 鏈接
<script src="https://cdn.jsdelivr.net/npm/markdown-text-editor"></script> |
2. HTML 結構
只需將 放入標準表單中即可。無需特殊包裝。
1 2 3 4 | <form action="/api/save" method="POST"> <textarea id="markdown-editor" name="content"># Hello World</textarea> <button type="submit">Save Content</button> </form> |
3. 導入 JS 和 CSS 並在 textarea 元素上初始化插件
1 2 3 4 5 6 | import MarkdownEditor from "markdown-text-editor"; const editor = new MarkdownEditor('#markdown-editor', { placeholder: 'Write your markdown...', toolbar: ['heading', 'bold', 'italic', 'strikethrough', 'ul', 'ol', 'checklist', 'blockquote', 'link', 'preview'], }); |
4. 配置與客製化
您可以透過傳遞 options 物件來完全自訂編輯器的行為和介面。如果省略選項,則使用預設值。
| 財產 | 類型 | 預設 | 目的 |
|---|---|---|---|
mode |
string |
'plain' |
設定初始視圖。使用 'hybrid' 獲得所見即所得體驗,或使用 'plain' 取得原始語法。 |
placeholder |
string |
'Write...' |
編輯器為空時顯示的文字。 |
toolbar |
array |
[...] |
定義顯示哪些工具以及顯示順序。 |
footer |
false | object |
全部可見 | 控制編輯器下方顯示的狀態列。設定為 false 以完全隱藏它,或傳遞一個物件來切換單一統計資訊。 |
theme |
string |
遺傳 | 明確設定編輯器主題('light'、'dark'、'snowberry'、'darkberry')。如果省略,編輯器將從最近的祖先元素或 本身繼承 data-theme。 |
minHeight |
number |
200 |
當內容較短時,編輯器將縮小到的最小高度(以像素為單位)。與 maxHeight 配對以設定自動增長範圍。 |
maxHeight |
number |
500 |
編輯器在非全螢幕模式下可以增長到的最大高度(以像素為單位)。一旦內容超過此高度,編輯器內就會出現捲軸。該編輯器還有一個拖曳手柄,因此使用者可以手動將其大小調整到超出此限制。 |
onChange |
function |
undefined |
每次內容變更時都會觸發回調 - 鍵入、工具列操作、撤銷/重做和清單延續。接收目前的 markdown 字串作為其唯一的參數。 |
🛠 工具列自訂
工具列是模組化的。您可以透過修改陣列來創建最低限度的體驗或功能齊全的電源套件。
可用工具
| 類別 | 工具鍵 |
|---|---|
| 版式 | heading, bold, italic, strikethrough, blockquote |
| 清單 | ul (子彈), ol (編號的), checklist |
| 程式碼 | code (排隊), codeblock (圍欄塊) |
| 刀片 | hr (水平線), table (表格模板) |
| 媒體 | link, image |
| 編輯 | undo, redo, indent, outdent |
| 看法 | preview |
💡實施技巧:
- 重新排序:按鈕會依照您在陣列中列出的確切順序顯示
- 刪除:只需從陣列中省略任何鍵(例如
image)即可為使用者完全停用該功能 - 原生後備:如果您未在 JS 中提供
placeholder,外掛程式將自動使用 HTML中的placeholder屬性
📊 頁腳(狀態列)
頁腳位於編輯器下方,顯示遊標的行、列、文件的字元數以及可選的字數——所有這些都是即時更新的。預設情況下它是可見的,並且每個統計資料都可以獨立切換。
| 鑰匙 | 類型 | 預設 | 描述 |
|---|---|---|---|
line |
boolean |
true |
顯示目前行號。 |
col |
boolean |
true |
顯示目前的列號。 |
chars |
boolean |
true |
顯示總字元數。 |
words |
boolean |
false |
顯示總字數。預設為關閉 — 設定為 true 即可啟用。 |
使用範例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // Default — line, col, and chars visible new MarkdownEditor('#editor'); // Disable the footer entirely new MarkdownEditor('#editor', { footer: false }); // Hide only character count new MarkdownEditor('#editor', { footer: { chars: false } }); // Hide line and column, keep character count new MarkdownEditor('#editor', { footer: { line: false, col: false } }); // Show only line number new MarkdownEditor('#editor', { footer: { col: false, chars: false } }); // Enable word count alongside the defaults new MarkdownEditor('#editor', { footer: { words: true } }); // Show word count only new MarkdownEditor('#editor', { footer: { line: false, col: false, chars: false, words: true } }); |
5. 取得、設定和提交內容
MarkdownEditor 的核心優勢之一是它保持底層 完美同步。無論您使用現代 JavaScript 框架還是傳統後端(例如 Django、PHP 或 Laravel),工作流程都保持簡單且原生。
1. The Native Way(推薦)
由於編輯器增強了標準文字區域,因此您可以使用熟悉的 DOM 方法。這是無需學習新 API 即可與資料互動的最快方式。
1 2 3 4 5 | // Retrieve content via ID const markdown = document.getElementById('markdown-editor').value; // Set content via ID (The editor UI updates automatically) document.getElementById('markdown-editor').value = "# New Heading Content"; |
2. 使用變數引用
如果您有對 textarea 元素的引用,則可以直接使用它 - 不需要特定於庫的 API。
1 2 3 4 5 6 7 | const textarea = document.getElementById('markdown-editor'); // Retrieve content const markdown = textarea.value; // Set content (the editor UI reflects this immediately) textarea.value = "## Updated via JS"; |
3. 設定和讀取內容
設定初始內容的建議方法是直接在 HTML 中 - 這自然適用於每個後端框架(Django、Laravel、Rails、PHP 等),並且編輯器會在 init 時自動呈現它。
1 2 | <!-- Recommended: set content server-side --> <textarea id="markdown-editor"># Hello World</textarea> |
若要在執行時間讀取或更新內容,請使用本機 textarea 值。更新後呼叫 editor.render() 以刷新預覽層和混合層。
1 2 3 4 5 6 7 8 | const textarea = document.getElementById('markdown-editor'); // Read const markdown = textarea.value; // Update at runtime textarea.value = '# New content'; editor.render(); |
4. 拆除編輯器-destroy()
呼叫 editor.destroy() 刪除編輯器 DOM 包裝器並將原始 還原到其在文件中的位置。在單頁應用程式中卸載視圖時很有用。
1 2 3 4 | const editor = new MarkdownEditor('#markdown-editor'); // Remove the editor and restore the plain textarea editor.destroy(); |
使用 onChange 回應更改
傳遞 onChange 回呼以在每次內容變更時收到通知。接收目前的 Markdown 字串。
1 2 3 4 5 | const editor = new MarkdownEditor('#markdown-editor', { onChange(value) { console.log('Content changed:', value.length, 'characters'); } }); |
使用 localStorage 自動儲存草稿
使用 onChange 在每次按鍵時儲存草稿。在初始化編輯器之前透過預先填充文字區域來恢復它。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | const DRAFT_KEY = 'my-page-draft'; // Restore saved draft before init (only if textarea starts empty) const textarea = document.getElementById('markdown-editor'); const saved = localStorage.getItem(DRAFT_KEY); if (saved && !textarea.value) textarea.value = saved; // Save on every change const editor = new MarkdownEditor('#markdown-editor', { onChange(value) { localStorage.setItem(DRAFT_KEY, value); } }); // Clear draft after successful form submission document.querySelector('form').addEventListener('submit', () => { localStorage.removeItem(DRAFT_KEY); }); |
4. 輕鬆自動提交表單
由於 MarkdownEditor 直接建立在原生 上,因此它開箱即用,與每個後端框架(Django、Laravel、PHP、Ruby on Rails 等)相容。
這就是「本地優先」理念的閃光點。您無需在提交表單之前手動同步資料。瀏覽器將編輯器視為標準輸入欄位。
1 2 3 4 5 6 7 8 9 10 11 12 | <form method="POST" action="/api/submit"> <textarea id="markdown-editor" name="content" class="h-48" rows="5"> # Initial Content </textarea> <button type="submit">Submit to Server</button> </form> <script> // Just initialize it. That's it. new MarkdownEditor('#markdown-editor'); </script> |
注意: MarkdownEditor 外掛程式必須初始化
只需使用標準 HTML 。文字區域上的 name 屬性是您的伺服器將用來識別內容的屬性。
🚀 為什麼它會改變後端的遊戲規則
由於編輯器保留本機 行為,因此您的伺服器將資料作為標準字串處理。所需的額外邏輯為零,無需 preventDefault() 也無需手動建構 FormData。
💡 為什麼這是一個「殺手級功能」:
大多數編輯器(如 Quill、Editor.js、simpleMDE、easyMDE)以複雜的 JSON 結構保存資料。如果開發人員使用這些,他們必須重寫他們的資料庫模式和渲染邏輯。
透過 MarkdownEditor,開發人員可以使用舊網站,用編輯器取代普通的 ,而後端甚至不知道它發生了變化。它只是收到與往常相同的原始文本,但用戶獲得了 10 倍更好的體驗。
| 框架/語言 | 如何存取 Markdown 內容 |
|---|---|
| PHP | $_POST['content'] |
| Django | request.POST.get('content') |
| Node.js (Express) | req.body.content |
| Laravel | $request->input('content') |
| Ruby on Rails | params[:content] |
配置選項
🖼️高級圖片上傳
本地處理圖像上傳(而不是依賴緩慢且佔用大量記憶體的 Base64 字串)對於效能和 SEO 來說都是一個重大勝利。
配置選項
圖像工具支援 fileInput 配置來處理直接伺服器上傳。
accept:定義允許的影像格式陣列(例如「webp」、「avif」)uploadUrl:指定將透過POST傳送File物件的後端端點params:可選對象,用於與映像檔一起傳送附加資料(例如 CSRF 令牌、使用者 ID 或資料夾名稱)
使用範例(完整配置)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | const options = { placeholder: 'Start writing...', toolbar: [ 'link', { image: { fileInput: { accept: ['webp', 'avif'], // restrict the image upload format uploadUrl: '/api/upload', // Your upload endpoint params: { _token: 'your_csrf_token_here', // Essential for Laravel/Django folder: 'blog_posts' } }, // Supports boolean: true/false OR object: { required: true } altInput: { required: true } } }, 'preview' ], } const editor = new MarkdownEditor('#markdown-editor', options); |
📡 伺服器整合詳細信息
1. 請求
編輯器以 multipart/form-data 形式傳送 POST 請求。預設情況下,它包括:
image_file:實際的文件對象image_alt:使用者輸入的替代文本- ...加上
params物件中定義的任何自訂數據
2. 所需的回應
若要確認上傳成功並將映像插入編輯器,您的伺服器必須傳回以下 JSON 結構:
1 2 3 4 | { "success": true, "image_path": "https://cdn.yourdomain.com/uploads/image.webp" } |
注意:確保使用 image_path 鍵作為上傳圖像的 URL。
圖像替代文字驗證 (altInput)
為了確保您的內容保持可訪問性和 SEO 友善性,MarkdownEditor 預設會強制執行替代文字驗證。您可以使用布林簡寫或詳細物件來配置此行為。
- 預設行為:如果未定義
altInput,則預設為{ required: true } - 強制輔助使用:在提供替代說明之前,使用者將無法插入影像
設定範例:
1.預設(無需配置)
1 2 3 4 | // Alt text is REQUIRED by default image: { fileInput: { uploadUrl: '/api/upload' } } |
2. 速記(禁用驗證)
如果您想允許沒有描述的圖像,只需將布林值設為 false 即可。
1 2 3 | image: { altInput: false // Users can now skip the alt text field } |
3. 基於物件(顯)
1 2 3 4 5 | image: { altInput: { required: false // Disables alt text validation — users can skip the alt field } } |
標準影像使用(無fileInput):
如果未配置 fileInput,則編輯器預設為簡單的基於 URL 的模式。如果您的用戶主要連結到外部圖像主機,那麼這是理想的選擇。
1 2 3 4 5 6 7 8 | const options = { toolbar: [ 'link', 'image', 'preview' ], } const editor = new MarkdownEditor('#markdown-editor', options); |
💡 為什麼要使用參數?
在 Laravel 或 Django 等框架中,如果沒有 CSRF 令牌,則無法上傳檔案。透過將 _token 新增至 params 對象,您的請求將無縫地通過後端的安全中介軟體,從而維護伺服器端控制器的「零邏輯」理念。
🔀 編輯模式
MarkdownEditor 提供兩種不同的方式來撰寫和格式化內容。您可以在傳統的以語法為中心的視圖或現代的視覺優先體驗之間切換。
配置
您可以在初始化期間使用 mode 屬性定義啟動模式。
plain(預設):乾淨、高效能的 Markdown 環境,其中語法(如**bold**或# header)可見。開發人員和 Markdown 純粹主義者的理想選擇hybrid:所見即所得的體驗,可在您鍵入時即時呈現格式(粗體、斜體、標題),同時仍保持底層 Markdown 結構。
執行:
1 2 3 4 5 6 7 8 9 10 11 12 | // Default initialization (Plain Mode) new MarkdownEditor('#markdown-editor'); // Explicit Plain Mode new MarkdownEditor('#markdown-editor', { mode: 'plain' }); // Hybrid (Visual) Mode new MarkdownEditor('#markdown-editor', { mode: 'hybrid' }); |
混合和普通模式預覽:
混合模式
當您鍵入時,視覺格式會即時呈現。
普通模式(預設)
專注於原始 Markdown 語法以提供輕量級體驗。
| 配置 | 財產/工具 | 描述 |
|---|---|---|
| 選項對象 | placeholder |
設定文字區域的佔位符文字(可選,因為您也可以使用標準 HTML 文字區域屬性) |
mode: 'hybrid' |
實現所見即所得的體驗,在您鍵入時即時呈現格式(粗體、斜體、標題) | |
工具列:決定工具列中顯示的工具及其順序。 |
heading |
開啟下拉式選單以選擇標題等級 H1–H6 |
bold |
啟用粗體文字格式。 | |
italic |
啟用斜體文字格式。 | |
strikethrough |
允許文字刪除線。 | |
ol |
(有序列表):將文字轉換為編號清單格式。 | |
ul |
(無序列表):將文字轉換為項目符號清單。 | |
checklist |
在文字中新增複選框,使其非常適合任務、待辦事項清單或追蹤完成狀態。 | |
blockquote |
反白顯示引用或強調的文字。 | |
code |
將選定的文字包含在單一反引號中以實現內聯代碼。再次點選可刪除反引號。 | |
codeblock |
將選定的文字包裝在三重反引號圍欄代碼區塊中。再次點選可移除柵欄。 | |
hr |
在遊標位置插入一條 --- 水平線。 |
|
table |
在遊標位置插入起始 2x3 Markdown 表格範本。 | |
image |
讓您透過 Markdown 語法插入圖片。 | |
link |
允許您向文字添加超連結。 | |
undo |
撤銷最後的變更。 | |
redo |
重新套用上次撤銷的變更。 | |
indent |
增加縮排等級。 | |
outdent |
降低壓痕等級。 | |
preview |
切換全螢幕並排預覽。預覽窗格中的核取方塊可按一下並立即更新 Markdown 來源。按 Esc 鍵退出全螢幕。 | |
| 高級圖像上傳功能: 允許配置圖像上傳到 您自己的伺服器並透過 API 設定圖像 路徑。這可以提高效能和 SEO。 |
fileInput |
accept:允許的映像檔類型陣列(例如'webp'、'avif')。 uploadUrl:透過 POST 傳送檔案的後端端點。 params:額外資料的可選物件(CSRF 令牌、使用者 ID、資料夾名稱)
|
altInput |
required: false:停用替代文字輸入驗證(預設為 true) |
⌨️ 鍵盤快速鍵
常見的格式化操作可以直接從鍵盤觸發,無需觸摸工具列。每個快捷方式也顯示在對應的工具列按鈕的工具提示中。
| 捷徑 | 行動 |
|---|---|
Ctrl + B / ⌘ B |
切換粗體 |
Ctrl + I / ⌘ I |
切換斜體 |
Ctrl + K / ⌘ K |
插入連結 |
Ctrl + ` / ⌘ ` |
切換內聯代碼 |
Ctrl + Shift + S / ⌘ ⇧ S |
切換 |
Ctrl + Z / ⌘ Z |
撤銷 |
Ctrl + Shift + Z / ⌘ ⇧ Z |
重做 |
Tab |
縮排選定的行 |
Shift + Tab |
減少縮排選定的行 |
Ctrl + F / ⌘ F |
打開尋找面板 |
Ctrl + H / ⌘ H |
打開尋找和取代面板 |
Escape |
關閉查找面板/退出全螢幕預覽 |
🔍 找出並找到代替
編輯器內提供內建尋找和取代面板 - 無需瀏覽器擴充功能或單獨的工具。
- 按下
Ctrl + F(或⌘ F)開啟尋找面板 - 按
Ctrl + H(或⌘ H)開啟尋找和尋找視窗。更換面板 - 搜尋不區分大小寫並顯示即時比賽計數器(例如3 / 12)
- 使用 ▲ / ▼ 按鈕或
Enter/Shift + Enter導覽匹配項 - 替換替換目前反白顯示的匹配項; 全部替換一次替換所有出現的內容
- 按
Escape關閉面板並將焦點返回編輯器
此面板浮動在編輯器內容區域的右上角,不會中斷寫入。
🌙 主題化
MarkdownEditor 自動從周圍頁面繼承其主題 - 無需配置。編輯器在初始化時從最近的祖先讀取data-theme,因此它與您網站的主題保持同步。
主題如何解決(優先順序)
themeoption - 在選項物件中傳遞的明確覆蓋上的data-theme— 直接在元素上設置- 任何祖先的
資料主題- 例如、或包裝可用主題
'light'(預設)、'dark'、'snowberry'、'darkberry'選項 1 — 從
或任何祖先繼承(零配置)html1 2 3 4 5 6
<html data-theme="dark"> ... <textarea id="markdown-editor"></textarea> <script> new MarkdownEditor('#markdown-editor'); // picks up dark automatically </script>
選項 2 — 直接在
上設定data-themehtml1 2 3 4
<textarea id="markdown-editor" data-theme="dark"></textarea> <script> new MarkdownEditor('#markdown-editor'); </script>
選項 3 — 明確的
theme選項(覆蓋所有內容)javascript1 2 3
new MarkdownEditor('#markdown-editor', { theme: 'dark' });
🎨 透過 CSS 變數自訂主題
您可以透過覆寫
.markdown-editor-wrapper元素或任何[data-theme]選擇器上的 CSS 變數來完全自訂編輯器的外觀。所有顏色均使用 OKLCH 色彩空間 以獲得統一的感知結果。多變的 目的 淺色預設 深色預設 --color-base編輯背景 oklch(100% 0 0)oklch(10.9% 0 0)--color-on-base主要文字顏色 oklch(22% 0 0)oklch(98% 0 0)--color-primary主要重音(工具列活動,連結) oklch(51.1% .262 277)oklch(66.4% .184 286)--color-on-primary原色表面上的文字 oklch(96.2% .018 272)oklch(10% .01 270)--color-secondary次要口音 oklch(59.1% .293 323)oklch(65% .18 220)--color-accent反白顯示重音符號(內聯代碼,斜體) oklch(54.1% .281 293)oklch(75% .18 50)--color-neutral中性表面(邊界、分隔線) oklch(15% 0 0)oklch(85% 0 0)--color-error錯誤狀態顏色 oklch(57.7% .245 27)oklch(60% .22 30)--border-radius編輯器框架的圓角 0.25rem自訂主題範例
編輯器初始化後覆蓋 .markdown-editor-wrapper 上的任何變量,或在樣式表中定義自訂
[data-theme]區塊:css1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/* Override individual variables */ .markdown-editor-wrapper { --color-primary: oklch(60% 0.2 30); /* orange accent */ --border-radius: 0.5rem; } /* Or define a full custom theme */ [data-theme="brand"] .markdown-editor-wrapper, .markdown-editor-wrapper[data-theme="brand"] { --color-base: oklch(15% 0.01 250); --color-on-base: oklch(95% 0 0); --color-primary: oklch(65% 0.22 145); /* green */ --color-on-primary: oklch(10% 0 0); --color-accent: oklch(75% 0.18 60); --color-neutral: oklch(80% 0 0); --border-radius: 0.75rem; }
javascriptnew MarkdownEditor('#markdown-editor', { theme: 'brand' });
- 即時預覽:在您輸入時查看立即呈現的 Markdown。
- 語法突出顯示:透過清晰的程式碼和 Markdown 格式增強可讀性。
- 輕鬆整合:只需最少的設定即可無縫整合到任何 Web 專案中。
- 可自訂工具列:動態配置和重新排序工具列選項,例如粗體、斜體等。
特徵
🔌 原生表單集成
工作原理與標準
完全相同。沒有複雜的 API — 只需使用value或name屬性。它「只適用於」PHP、Django 或 Node.js 中的標準 HTML 表單提交。🖼️ 高級圖片上傳
透過 API 設定本機伺服器上傳。透過在您自己的 CDN 上託管圖像,避免使用繁重的 Base64 字串,以確保更快的頁面加載和卓越的 SEO。
🔀 混合模式和普通模式
在用於視覺化編輯的混合 (WYSIWYG) 體驗和用於傳統編碼感覺的純 Markdown 模式之間切換。
🚀 高性能
一個針對「重內容」進行最佳化的小型 ~116KB 捆綁包。處理大量文件和大文件,不會出現任何輸入延遲或效能下降。
🌍 內建 RTL 支持
阿拉伯語、烏爾都語和波斯語等從右到左語言的本機支援。非常適合建立全球可訪問的應用程式。
🌙 自適應主題
包括自動深色模式支援。它與您的系統設定或 Frutjam UI 庫同步,以提供無縫的視覺體驗。
📝 智能編輯
GitHub 風格的自動清單延續,適用於有序清單、無序列表和清單 - 按 Enter 鍵,編輯器將繼續該模式。預覽窗格中的核取方塊可點選並立即同步回 Markdown 來源。
📱 完全響應
流暢、行動優先的使用者介面,完美適應桌上型電腦、平板電腦和智慧型手機,隨時隨地進行編輯。
📦 普遍支持
與ESM、UMD、CommonJS 和 IIFE 相容。透過 CDN (
)、npm 或任何捆綁器(Vite、webpack、Rollup)開箱即用 — 無需額外配置。♿ 預設可訪問
內建完整的 ARIA 支援 - 工具列地標、帶標籤的預覽區域、螢幕閱讀器友好的按鈕、預覽切換上的
aria-pressed、非活動工具上的disabled和aria-disabled,以及模態關閉時正確的焦點恢復。🛡️ 零 CSS 衝突
編輯器樣式的範圍完全限於
.markdown-editor-wrapper。 Tailwind 的全域預檢被排除,因此編輯器可以安全地與 Bootstrap、Tailwind 或任何其他框架一起使用,而不會破壞它們的風格。⌨️ 鍵盤快速鍵
Ctrl+B、Ctrl+I、Ctrl+K、Ctrl+`、Ctrl+Shift+S— 無需觸碰滑鼠的常見格式化操作。每個快捷方式都顯示在工具列按鈕的工具提示中。🔍 找出並找到代替
按
Ctrl+F進行尋找或按Ctrl+H開啟尋找&代替。不區分大小寫的搜索,具有即時匹配計數器、下一個/上一個導航、單一替換和全部替換 - 無需離開編輯器。完整配置範例
使用這個綜合範例來初始化 MarkdownEditor 的所有主要功能,包括自訂工具列排序和進階映像上傳處理。
javascript1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
const editor = new MarkdownEditor('#markdown-editor', { mode: 'hybrid', placeholder: 'Start writing...', footer: { line: true, col: true, chars: true, words: true, }, onChange(value) { console.log('Content updated:', value.length, 'characters'); }, toolbar: [ 'heading', 'bold', 'italic', 'strikethrough', 'blockquote', 'ul', 'ol', 'checklist', 'code', 'codeblock', 'hr', 'table', { image: { fileInput: { accept: ['webp', 'avif', 'png'], uploadUrl: '/api/upload' } } }, 'link', 'undo', 'redo', 'indent', 'outdent', 'preview' ], }); // Read content natively const markdown = document.getElementById('markdown-editor').value; // Update content programmatically (dispatch input to keep preview in sync) // const ta = document.getElementById('markdown-editor'); // ta.value = '# New content'; // ta.dispatchEvent(new Event('input', { bubbles: true })); // destroy() when the view unmounts (SPAs) // editor.destroy();