Maison interface Web js tutoriel Un moyen simple d'implémenter un éditeur de texte enrichi JavaScript

Un moyen simple d'implémenter un éditeur de texte enrichi JavaScript

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

Je cherchais des informations sur les éditeurs de texte enrichi il y a quelque temps, puis j'ai découvert ce projet appelé Pell. Il s'agit d'un éditeur de texte WYSIWYG (What You See Is What You Get). Bien que sa fonction soit très simple, il. Étonnamment, sa taille n'est que de 1 Ko. Le fichier principal du projet, pell.js, ne comporte que 130 lignes. Même si d'autres parties sont ajoutées, le nombre total de js est inférieur à 200 lignes. Cet article présente principalement la méthode d'implémentation d'un éditeur de texte enrichi avec moins de 200 lignes de code JavaScript. Les amis dans le besoin peuvent s'y référer. J'espère que cela pourra aider tout le monde.

Le code principal du projet est dans le fichier pell.js. Sa structure est très simple. La mise en œuvre des fonctions principales dépend des parties suivantes

  • actions. objet

  • fonction exec()

  • fonction init()

Document. execCommand()

Commençons par la partie la plus simple. La fonction exec() n'a que les trois lignes suivantes :

export const exec = (command, value =null) => {
  document.execCommand(command, false, value);
};
Copier après la connexion

Elle enveloppe document.execCommand() de manière simple, Document. .execCommand() est le cœur de cet éditeur. Sa syntaxe est la suivante :

bool = document.execCommand(aCommandName, aShowDefaultUI, aValueArgument)
Copier après la connexion
  • aCommandName est une chaîne représentant la commande que vous souhaitez exécuter, telle que : bold 'bold. ', créez le lien 'createLink', changez la taille de la police 'fontSize' etc.

  • aShowDefaultUI Indique s'il faut afficher l'interface utilisateur par défaut

  • aValueArgument Certaines commandes nécessitent une saisie supplémentaire, comme insert L'adresse doit être donnée pour les images et les liens

Remarque : Après mes expériences, changer la valeur de aShowDefaultUI sous Chrome n'a aucun effet Ceci est mentionné dans cette question stackoverflow. Il s'agit d'un paramètre de l'ancienne version d'IE, il peut donc être défini sur false ici.

Objet actions

Un objet nommé actions est défini dans le fichier, qui correspond à la rangée de boutons de la barre d'outils dans la figure ci-dessous. Chaque sous-objet dans les actions enregistre une propriété de bouton. .

Partie du code :

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')
  },
  // …
}
Copier après la connexion

Ce code affiche trois attributs d'objet nommés gras, italique et souligné, qui correspondent aux caractères gras, italique et souligné devant la barre d'outils. . Boutons, on constate que leurs structures sont les mêmes, avec les trois attributs suivants :

  • icône : Comment afficher

  • titre : C'est le titre

  • résultat : une fonction qui sera assignée au bouton en tant qu'événement de clic et appellera la fonction exec() mentionnée précédemment pour faire fonctionner le texte


Maintenant que nous avons l'objet actions, comment l'utiliser ? Cela dépend de la fonction init(). Elle sélectionnera des éléments de l'objet actions pour former un tableau selon certaines règles. Chaque élément du tableau générera un bouton. settings.actions dans le code ci-dessous se trouve ce tableau dont chaque élément correspond à un bouton affiché sur la barre d'outils. Les règles de génération de settings.actions seront expliquées plus tard.

// 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)
})
Copier après la connexion
De cette façon, chaque élément du tableau génère un bouton sur la barre d'outils.

Fonction d'initialisation init()

Lorsque vous souhaitez utiliser l'éditeur pell, appelez simplement la fonction init() pour initialiser un éditeur. Il reçoit un objet de configuration en tant que paramètre, qui contient des propriétés comme celle-ci :

  • element : l'élément DOM de l'éditeur

  • styleWithCSS : défini sur Lorsque c'est vrai, sera utilisé à la place des actions

  • onChange


Le plus important, ce sont les actions, qui sont un array , contient la liste des boutons que vous souhaitez afficher dans la barre d'outils.

Le tableau actions peut avoir les éléments suivants :

  • Une chaîne

  • Un objet avec un attribut name

  • Un objet sans attribut de nom, mais avec les attributs nécessaires icône, résultat, etc. pour générer un bouton


actions: [
 'bold',
 'underline',
 'italic',
 {
  name: 'image',
  result: ()=> {
   const url = window.prompt('Enter the image URL')
   if (url) window.pell.exec('insertImage', ensureHTTP(url))
  }
 },
 // ...
]
Copier après la connexion
dans La fonction init () combinera ce paramètre d'actions avec l'objet d'actions défini dans pell.js. Vous pouvez utiliser l'objet d'actions comme paramètre par défaut :

// 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])
Copier après la connexion
Si le paramètre d'objet de paramètre le fait. not Si le tableau actions est inclus, l'objet actions précédemment défini sera initialisé par défaut.

Une partie importante de la fonction init() consiste à créer une zone modifiable Ici, un élément p est créé et son attribut contentEditable est défini sur true, afin que le document mentionné précédemment puisse être utilisé ici. () commande.

// 创建编辑区域的元素
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)
Copier après la connexion
Organisation du processus

Enfin, prenez « Insérer un lien » comme exemple pour trier l'ensemble du processus de l'éditeur :

Lors de l'appel de la fonction init(). , Ajoutez l'élément suivant au tableau d'actions de l'objet paramètre

{
  name: 'link',
  result: ()=> {
    const url = window.prompt('Enter the link URL')
    if (url) window.pell.exec('createLink', ensureHTTP(url))
  }
}
Copier après la connexion
2. Pendant le processus d'exécution de init(), il vérifiera si l'objet d'actions défini a l'attribut de lien. Après vérification, l'attribut existe

link: {
  icon: '',
  title: 'Link',
  result: ()=> {
    const url = window.prompt('Enter the link URL')
    if (url) exec('createLink', url)
  }
}
Copier après la connexion
Étant donné que le paramètre entrant contient l'élément de résultat, le résultat entrant est utilisé pour remplacer la valeur par défaut dans l'objet lien, puis l'objet lien modifié est placé dans le tableau settings.actions.

3. Parcourez le tableau settings.actions pour générer la barre d'outils. L'objet lien est utilisé comme l'un des éléments pour générer un bouton "Insérer un lien". La propriété result devient son événement click.

4. Après avoir cliqué sur le bouton "Insérer un lien", il vous sera demandé de saisir une URL, puis d'appeler exec('createLink', url) pour insérer le lien dans la zone d'édition.

Le processus fonctionnel des autres boutons de l'éditeur est également similaire.

De cette façon, la plupart du contenu de l'éditeur Pell a été expliqué, et vous devez encore regarder le code source pour les parties restantes. Après tout, le code du projet n’est pas long, c’est donc une bonne introduction à l’éditeur de texte.

Recommandations associées :

L'éditeur Baidu ajoute une fonction de filigrane d'image

Quatre éditeurs HTML en ligne gratuits et faciles à utiliser

Implémentation JavaScript de la syntaxe de l'éditeur de zone de saisie mettant en évidence les idées et les détails du code

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Logiciel essentiel pour la programmation en langage C : cinq bons assistants recommandés pour les débutants Logiciel essentiel pour la programmation en langage C : cinq bons assistants recommandés pour les débutants Feb 20, 2024 pm 08:18 PM

Le langage C est un langage de programmation basique et important. Pour les débutants, il est très important de choisir un logiciel de programmation approprié. Il existe de nombreuses options de logiciels de programmation C sur le marché, mais pour les débutants, il peut être un peu déroutant de choisir celui qui vous convient le mieux. Cet article recommandera cinq logiciels de programmation en langage C aux débutants pour les aider à démarrer rapidement et à améliorer leurs compétences en programmation. Dev-C++Dev-C++ est un environnement de développement intégré (IDE) gratuit et open source, particulièrement adapté aux débutants. Il est simple et facile à utiliser, intégrant un éditeur,

Recommandé : Excellent projet de détection et de reconnaissance des visages open source JS Recommandé : Excellent projet de détection et de reconnaissance des visages open source JS Apr 03, 2024 am 11:55 AM

La technologie de détection et de reconnaissance des visages est déjà une technologie relativement mature et largement utilisée. Actuellement, le langage d'application Internet le plus utilisé est JS. La mise en œuvre de la détection et de la reconnaissance faciale sur le front-end Web présente des avantages et des inconvénients par rapport à la reconnaissance faciale back-end. Les avantages incluent la réduction de l'interaction réseau et de la reconnaissance en temps réel, ce qui réduit considérablement le temps d'attente des utilisateurs et améliore l'expérience utilisateur. Les inconvénients sont les suivants : il est limité par la taille du modèle et la précision est également limitée ; Comment utiliser js pour implémenter la détection de visage sur le web ? Afin de mettre en œuvre la reconnaissance faciale sur le Web, vous devez être familier avec les langages et technologies de programmation associés, tels que JavaScript, HTML, CSS, WebRTC, etc. Dans le même temps, vous devez également maîtriser les technologies pertinentes de vision par ordinateur et d’intelligence artificielle. Il convient de noter qu'en raison de la conception du côté Web

Introduction aux outils de développement du langage Go : une liste d'outils essentiels Introduction aux outils de développement du langage Go : une liste d'outils essentiels Mar 29, 2024 pm 01:06 PM

Titre : Introduction aux outils de développement du langage Go : Liste des outils essentiels Dans le processus de développement du langage Go, l'utilisation d'outils de développement appropriés peut améliorer l'efficacité du développement et la qualité du code. Cet article présentera plusieurs outils essentiels couramment utilisés dans le développement du langage Go et joindra des exemples de code spécifiques pour permettre aux lecteurs de comprendre leur utilisation et leurs fonctions de manière plus intuitive. 1.VisualStudioCodeVisualStudioCode est un outil de développement multiplateforme léger et puissant doté de plug-ins et de fonctions riches.

Recommandations de l'éditeur Golang : cinq choix adaptés au développement Recommandations de l'éditeur Golang : cinq choix adaptés au développement Jan 19, 2024 am 09:00 AM

Avec la popularité et la popularité de Golang, de plus en plus de développeurs commencent à utiliser ce langage de programmation. Cependant, comme d'autres langages de programmation populaires, le développement Golang nécessite le choix d'un éditeur approprié pour améliorer l'efficacité du développement. Dans cet article, nous présenterons cinq éditeurs adaptés au développement Golang. VisualStudioCodeVisualStudioCode (VSCode en abrégé) est un éditeur multiplateforme gratuit développé par Microsoft. Il est basé sur Elect

Conseils de développement PHP et JS : maîtrisez la méthode de création de graphiques en bougies boursières Conseils de développement PHP et JS : maîtrisez la méthode de création de graphiques en bougies boursières Dec 18, 2023 pm 03:39 PM

Avec le développement rapide de la finance sur Internet, l'investissement en actions est devenu le choix de plus en plus de personnes. Dans le trading d'actions, les graphiques en bougies sont une méthode d'analyse technique couramment utilisée. Ils peuvent montrer l'évolution des cours des actions et aider les investisseurs à prendre des décisions plus précises. Cet article présentera les compétences de développement de PHP et JS, amènera les lecteurs à comprendre comment dessiner des graphiques en bougies boursières et fournira des exemples de code spécifiques. 1. Comprendre les graphiques en bougies boursières Avant de présenter comment dessiner des graphiques en bougies boursières, nous devons d'abord comprendre ce qu'est un graphique en bougies. Les graphiques en chandeliers ont été développés par les Japonais

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Explication détaillée des fonctions VSCode : Comment cela vous aide-t-il à améliorer l'efficacité du travail ? Explication détaillée des fonctions VSCode : Comment cela vous aide-t-il à améliorer l'efficacité du travail ? Mar 25, 2024 pm 05:27 PM

Explication détaillée des fonctions VSCode : Comment cela vous aide-t-il à améliorer l'efficacité du travail ? Avec le développement continu de l'industrie du développement de logiciels, la recherche par les développeurs de l'efficacité du travail et de la qualité du code est devenue un objectif important dans leur travail. Dans ce processus, le choix de l’éditeur de code devient une décision cruciale. Parmi les nombreux éditeurs, Visual Studio Code (VSCode en abrégé) est apprécié par la majorité des développeurs pour ses fonctions puissantes et son évolutivité flexible. Cet article présentera en détail certaines fonctions de VSCode et discutera

Comprendre VSCode : à quoi sert cet outil ? Comprendre VSCode : à quoi sert cet outil ? Mar 25, 2024 pm 03:06 PM

« Comprendre VSCode : à quoi sert cet outil ? » 》En tant que programmeur, que vous soyez débutant ou développeur expérimenté, vous ne pouvez pas vous passer de l'utilisation d'outils d'édition de code. Parmi les nombreux outils d'édition, Visual Studio Code (VSCode en abrégé) est très populaire parmi les développeurs en tant qu'éditeur de code open source, léger et puissant. Alors, à quoi sert exactement VSCode ? Cet article approfondira les fonctions et les utilisations de VSCode et fournira des exemples de code spécifiques pour aider les lecteurs.

See all articles