Heim Web-Frontend js-Tutorial Eine einfache Möglichkeit, einen JavaScript-Rich-Text-Editor zu implementieren

Eine einfache Möglichkeit, einen JavaScript-Rich-Text-Editor zu implementieren

Jan 05, 2018 am 09:34 AM
javascript js 编辑器

Ich habe vor einiger Zeit nach Informationen zu Rich-Text-Editoren gesucht und dann dieses Projekt namens „What You See Is What You Get“ (WYSIWYG) entdeckt Überraschenderweise ist es nur 1 KB groß. Die Kerndatei des Projekts, pell.js, hat nur 130 Zeilen. Selbst wenn andere Teile hinzugefügt werden, beträgt die Gesamtzahl der js weniger als 200 Zeilen. In diesem Artikel wird hauptsächlich die Methode zur Implementierung eines Rich-Text-Editors mit weniger als 200 Zeilen JavaScript-Code vorgestellt. Ich hoffe, dass er allen helfen kann.

Der Hauptcode des Projekts befindet sich in der Datei pell.js. Die Implementierung der Hauptfunktionen hängt von den folgenden Teilen ab:

  • Aktionen Objekt

  • exec()-Funktion

  • init()-Funktion

Dokument. execCommand()

Beginnen wir mit dem einfachsten Teil. Die Funktion exec() hat nur die folgenden drei Zeilen:

export const exec = (command, value =null) => {
  document.execCommand(command, false, value);
};
Nach dem Login kopieren

Sie umschließt document.execCommand() auf einfache Weise, Document .execCommand( ) ist der Kern dieses Editors. Seine Syntax ist wie folgt:

bool = document.execCommand(aCommandName, aShowDefaultUI, aValueArgument)
Nach dem Login kopieren
  • aCommandName ist eine Zeichenfolge, die den Befehl darstellt, den Sie ausführen möchten, wie zum Beispiel: fett 'bold ', Link erstellen 'createLink', Schriftgröße ändern 'fontSize' usw.

  • aShowDefaultUI Ob die Standardbenutzeroberfläche angezeigt werden soll

  • aValueArgument Einige Befehle erfordern zusätzliche Eingaben, wie zum Beispiel „Einfügen“. Für Bilder und Links muss die Adresse angegeben werden

Hinweis: Nach meinen Experimenten hat das Ändern des Werts von aShowDefaultUI unter Chrome keine Auswirkung . Dies wird in dieser Stackoverflow-Frage erwähnt. Es handelt sich um einen Parameter aus der alten Version von IE, daher kann er hier auf den Standardwert „false“ gesetzt werden.

actions-Objekt

In der Datei ist ein Objekt mit dem Namen „actions“ definiert, das der Schaltflächenreihe in der Abbildung unten entspricht. Jedes Unterobjekt in „actions“ speichert eine Schaltflächeneigenschaft .

Teil des Codes:

const actions = {
  bold: {
    icon: '<b>B</b>',
    title: 'Bold',
    result: ()=> exec('bold')
  },
  italic: {
    icon: '<i>I</i>',
    title: 'Italic',
    result: ()=> exec('italic')
  },
  underline: {
    icon: '<u>U</u>',
    title: 'Underline',
    result: ()=> exec('underline')
  },
  // …
}
Nach dem Login kopieren

Dieser Code zeigt drei Objektattribute mit den Namen Fett, Kursiv und Unterstrichen an, die den Fett-, Kursiv- und Unterstreichungen vorne in der Symbolleiste entsprechen . Schaltflächen, es ist ersichtlich, dass ihre Strukturen gleich sind, mit den folgenden drei Attributen:

  • Symbol: So zeigen Sie

  • Titel: Es ist der Titel

  • Ergebnis: eine Funktion, die der Schaltfläche als Klickereignis zugewiesen wird und die zuvor erwähnte exec()-Funktion aufruft, um den Text zu bedienen


Da wir nun das Aktionsobjekt haben, wie verwenden wir es? Dies hängt von der Funktion init() ab. Sie wählt nach bestimmten Regeln Elemente aus dem Aktionsobjekt aus, um ein Array zu bilden. Jedes Element im Array generiert eine Schaltfläche. „settings.actions“ im folgenden Code ist dieses Array, dessen Elemente jeweils einer in der Symbolleiste angezeigten Schaltfläche entsprechen. Die Generierungsregeln von Settings.actions werden später erläutert.

// pell.js 中的 init() 函数
settings.actions.forEach(action=> {
  // 新建一个按钮元素
  const button = document.createElement('button')
  // 给按钮加上 css 样式
  button.className = settings.classes.button
  // 把 icon 属性作为内容显示出来
  button.innerHTML = action.icon
  button.title = action.title
  // 把 result 属性赋给按钮作为点击事件
  button.onclick = action.result
  // 将创建的按钮添加到工具栏上
  actionbar.appendChild(button)
})
Nach dem Login kopieren
Auf diese Weise generiert jedes Element im Array eine Schaltfläche in der Symbolleiste.

Initialisierungsfunktion init()

Wenn Sie den Pell-Editor verwenden möchten, rufen Sie einfach die Funktion init() auf, um einen Editor zu initialisieren. Es erhält ein Einstellungsobjekt als Parameter, das einige Eigenschaften wie diese enthält:

  • element: das DOM-Element des Editors

  • styleWithCSS: gesetzt auf Wenn wahr, werden anstelle von

  • Aktionen verwendet

  • onChange


Das Wichtigste sind Aktionen, das ist ein Array enthält die Liste der Schaltflächen, die Sie in der Symbolleiste anzeigen möchten.

Das Aktionsarray kann die folgenden Elemente haben:

  • Eine Zeichenfolge

  • Ein Objekt mit einem Namensattribut

  • Ein Objekt ohne Namensattribut, aber mit den notwendigen Attributen Symbol, Ergebnis usw., um eine Schaltfläche


actions: [
 'bold',
 'underline',
 'italic',
 {
  name: 'image',
  result: ()=> {
   const url = window.prompt('Enter the image URL')
   if (url) window.pell.exec('insertImage', ensureHTTP(url))
  }
 },
 // ...
]
Nach dem Login kopieren
zu generieren Die Funktion init() kombiniert diesen Aktionsparameter mit dem in pell.js definierten Aktionsobjekt. Sie können das Aktionsobjekt als Standardeinstellung verwenden:

// pell.js 中的 init() 函数
settings.actions = settings.actions
  ? settings.actions.map(action=> {
    if (typeof action === 'string') return actions[action]
    // 如果参数中传入的 action 已经在默认设置中存在,用传入的参数覆盖默认设置
    else if (actions[action.name]) {
      return { ...actions[action.name], ...action }
    }
    return action
  })
  : Object.keys(actions).map(action=> actions[action])
Nach dem Login kopieren
Wenn die Parameterobjekteinstellung dies tut not Wenn das Actions-Array enthalten ist, wird das zuvor definierte Actions-Objekt standardmäßig initialisiert.

Ein wichtiger Teil der init()-Funktion besteht darin, einen bearbeitbaren Bereich zu erstellen. Dabei wird ein p-Element erstellt und dessen contentEditable-Attribut auf true gesetzt, sodass das zuvor erwähnte Dokument .execCommand verwendet werden kann ()-Befehl.

// 创建编辑区域的元素
settings.element.content = document.createElement('p')
// 让 p 成为可编辑状态
settings.element.content.contentEditable = true
settings.element.content.className = settings.classes.content
// 当用户输入时,更新页面的相应部分
settings.element.content.oninput = event=> 
  settings.onChange(event.target.innerHTML)
settings.element.content.onkeydown = preventTab
settings.element.appendChild(settings.element.content)
Nach dem Login kopieren
Prozessorganisation

Nehmen Sie abschließend „Link einfügen“ als Beispiel, um den gesamten Editorprozess zu sortieren:

1. Beim Aufruf der Funktion init() , Fügen Sie das folgende Element zum Aktionsarray des Parameterobjekts hinzu

{
  name: 'link',
  result: ()=> {
    const url = window.prompt('Enter the link URL')
    if (url) window.pell.exec('createLink', ensureHTTP(url))
  }
}
Nach dem Login kopieren
2. Während des laufenden Prozesses von init() wird geprüft, ob das definierte Aktionsobjekt das Link-Attribut hat. Nach der Überprüfung existiert das Attribut tatsächlich

link: {
  icon: '',
  title: 'Link',
  result: ()=> {
    const url = window.prompt('Enter the link URL')
    if (url) exec('createLink', url)
  }
}
Nach dem Login kopieren
Da der eingehende Parameter das Ergebniselement enthält, wird das eingehende Ergebnis verwendet, um den Standardwert im Linkobjekt zu ersetzen, und dann wird das geänderte Linkobjekt im platziert Settings.actions-Array.

3. Durchlaufen Sie das Array „settings.actions“, um die Symbolleiste zu generieren. Das Linkobjekt wird als eines der Elemente zum Generieren einer Schaltfläche „Link einfügen“ verwendet. Die Ergebniseigenschaft wird zu ihrem Klickereignis.

4. Nachdem Sie auf die Schaltfläche „Link einfügen“ geklickt haben, werden Sie aufgefordert, eine URL einzugeben und dann exec('createLink', url) aufzurufen, um den Link in den Bearbeitungsbereich einzufügen.

Auch der Funktionsablauf anderer Buttons im Editor ist ähnlich.

Auf diese Weise wurde der größte Teil des Inhalts des Pell-Editors erklärt, und Sie müssen sich für die restlichen Teile noch den Quellcode ansehen. Schließlich ist der Code des Projekts nicht lang und bietet daher eine gute Einführung in den Texteditor.

Verwandte Empfehlungen:

Baidu-Editor fügt Bildwasserzeichenfunktion hinzu

Vier benutzerfreundliche kostenlose Online-HTML-Editoren

JavaScript-Implementierung der Syntax des Eingabefeld-Editors, die Ideen und Codedetails hervorhebt

Das obige ist der detaillierte Inhalt vonEine einfache Möglichkeit, einen JavaScript-Rich-Text-Editor zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Unverzichtbare Software für die C-Sprachprogrammierung: Fünf gute Helfer, die Einsteigern empfohlen werden Unverzichtbare Software für die C-Sprachprogrammierung: Fünf gute Helfer, die Einsteigern empfohlen werden Feb 20, 2024 pm 08:18 PM

Die Sprache C ist eine grundlegende und wichtige Programmiersprache. Für Anfänger ist es sehr wichtig, die richtige Programmiersoftware auszuwählen. Es gibt viele verschiedene Optionen für C-Programmiersoftware auf dem Markt, aber für Anfänger kann es etwas verwirrend sein, sich für die richtige zu entscheiden. In diesem Artikel werden Anfängern fünf C-Programmiersoftware empfohlen, um ihnen den schnellen Einstieg zu erleichtern und ihre Programmierkenntnisse zu verbessern. Dev-C++Dev-C++ ist eine kostenlose und quelloffene integrierte Entwicklungsumgebung (IDE), die sich besonders für Anfänger eignet. Es ist einfach und benutzerfreundlich und integriert einen Editor,

Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Apr 03, 2024 am 11:55 AM

Die Technologie zur Gesichtserkennung und -erkennung ist bereits eine relativ ausgereifte und weit verbreitete Technologie. Derzeit ist JS die am weitesten verbreitete Internetanwendungssprache. Die Implementierung der Gesichtserkennung und -erkennung im Web-Frontend hat im Vergleich zur Back-End-Gesichtserkennung Vor- und Nachteile. Zu den Vorteilen gehören die Reduzierung der Netzwerkinteraktion und die Echtzeiterkennung, was die Wartezeit des Benutzers erheblich verkürzt und das Benutzererlebnis verbessert. Die Nachteile sind: Es ist durch die Größe des Modells begrenzt und auch die Genauigkeit ist begrenzt. Wie implementiert man mit js die Gesichtserkennung im Web? Um die Gesichtserkennung im Web zu implementieren, müssen Sie mit verwandten Programmiersprachen und -technologien wie JavaScript, HTML, CSS, WebRTC usw. vertraut sein. Gleichzeitig müssen Sie auch relevante Technologien für Computer Vision und künstliche Intelligenz beherrschen. Dies ist aufgrund des Designs der Webseite erwähnenswert

Einführung in die Go-Sprachentwicklungstools: eine Liste der wichtigsten Tools Einführung in die Go-Sprachentwicklungstools: eine Liste der wichtigsten Tools Mar 29, 2024 pm 01:06 PM

Titel: Einführung in die Go-Sprachentwicklungstools: Liste der wesentlichen Tools Im Entwicklungsprozess der Go-Sprache kann die Verwendung geeigneter Entwicklungstools die Entwicklungseffizienz und Codequalität verbessern. In diesem Artikel werden mehrere wichtige Tools vorgestellt, die häufig in der Go-Sprachentwicklung verwendet werden, und spezifische Codebeispiele angehängt, damit die Leser ihre Verwendung und Funktionen intuitiver verstehen können. 1.VisualStudioCodeVisualStudioCode ist ein leichtes und leistungsstarkes plattformübergreifendes Entwicklungstool mit umfangreichen Plug-Ins und Funktionen.

Empfehlungen des Golang-Editors: Fünf für die Entwicklung geeignete Optionen Empfehlungen des Golang-Editors: Fünf für die Entwicklung geeignete Optionen Jan 19, 2024 am 09:00 AM

Mit der Popularität und Beliebtheit von Golang beginnen immer mehr Entwickler, diese Programmiersprache zu verwenden. Wie bei anderen gängigen Programmiersprachen erfordert die Golang-Entwicklung jedoch die Auswahl eines geeigneten Editors, um die Entwicklungseffizienz zu verbessern. In diesem Artikel stellen wir fünf Editoren vor, die für die Golang-Entwicklung geeignet sind. VisualStudioCodeVisualStudioCode (kurz VSCode) ist ein kostenloser plattformübergreifender Editor, der von Microsoft entwickelt wurde. Es basiert auf Elect

PHP- und JS-Entwicklungstipps: Beherrschen Sie die Methode zum Zeichnen von Aktienkerzendiagrammen PHP- und JS-Entwicklungstipps: Beherrschen Sie die Methode zum Zeichnen von Aktienkerzendiagrammen Dec 18, 2023 pm 03:39 PM

Mit der rasanten Entwicklung der Internetfinanzierung sind Aktieninvestitionen für immer mehr Menschen zur Wahl geworden. Im Aktienhandel sind Kerzendiagramme eine häufig verwendete Methode der technischen Analyse. Sie können den sich ändernden Trend der Aktienkurse anzeigen und Anlegern helfen, genauere Entscheidungen zu treffen. In diesem Artikel werden die Entwicklungskompetenzen von PHP und JS vorgestellt, der Leser wird zum Verständnis des Zeichnens von Aktienkerzendiagrammen geführt und es werden spezifische Codebeispiele bereitgestellt. 1. Aktien-Kerzendiagramme verstehen Bevor wir uns mit dem Zeichnen von Aktien-Kerzendiagrammen befassen, müssen wir zunächst verstehen, was ein Kerzendiagramm ist. Candlestick-Charts wurden von den Japanern entwickelt

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

Detaillierte Erläuterung der VSCode-Funktionen: Wie hilft es Ihnen, die Arbeitseffizienz zu verbessern? Detaillierte Erläuterung der VSCode-Funktionen: Wie hilft es Ihnen, die Arbeitseffizienz zu verbessern? Mar 25, 2024 pm 05:27 PM

Detaillierte Erläuterung der VSCode-Funktionen: Wie hilft es Ihnen, die Arbeitseffizienz zu verbessern? Mit der kontinuierlichen Weiterentwicklung der Softwareentwicklungsbranche ist das Streben der Entwickler nach Arbeitseffizienz und Codequalität zu wichtigen Zielen ihrer Arbeit geworden. In diesem Prozess wird die Wahl des Code-Editors zu einer Schlüsselentscheidung. Unter vielen Editoren ist Visual Studio Code (kurz VSCode) bei den meisten Entwicklern aufgrund seiner leistungsstarken Funktionen und flexiblen Skalierbarkeit beliebt. In diesem Artikel werden einige Funktionen von VSCode ausführlich vorgestellt und erläutert

VSCode verstehen: Wofür wird dieses Tool verwendet? VSCode verstehen: Wofür wird dieses Tool verwendet? Mar 25, 2024 pm 03:06 PM

„VSCode verstehen: Wofür wird dieses Tool verwendet?“ „Als Programmierer, egal ob Sie Anfänger oder erfahrener Entwickler sind, können Sie auf den Einsatz von Codebearbeitungstools nicht verzichten.“ Unter vielen Bearbeitungstools ist Visual Studio Code (kurz VSCode) bei Entwicklern als Open-Source-, leichter und leistungsstarker Code-Editor sehr beliebt. Wofür genau wird VSCode verwendet? Dieser Artikel befasst sich mit den Funktionen und Verwendungsmöglichkeiten von VSCode und stellt spezifische Codebeispiele bereit, um den Lesern zu helfen

See all articles