Maison > interface Web > js tutoriel > Comment insérer du HTML au niveau du curseur dans un Div ContentEditable ?

Comment insérer du HTML au niveau du curseur dans un Div ContentEditable ?

DDD
Libérer: 2024-11-11 03:42:02
original
657 Les gens l'ont consulté

How to Insert HTML at the Cursor in a ContentEditable Div?

Insérer du HTML au niveau du curseur dans un Div ContentEditable

Lorsque vous travaillez avec un div qui permet l'édition, vous souhaiterez peut-être insérer du HTML directement à le curseur. Alors que des méthodes telles que insertText() peuvent ajouter du texte brut, les navigateurs affichent généralement le HTML inséré de cette manière sous forme de texte plutôt que de l'exécuter.

Pour surmonter cette limitation, une approche plus élaborée est nécessaire. Une solution consiste à exploiter la méthode insertNode() de l’objet Range. Cependant, IE8 et versions antérieures s'appuient sur pasteHTML().

Implémentation

La fonction suivante gère l'insertion HTML dans les principaux navigateurs :

function pasteHtmlAtCaret(html) {
  // Obtain the selection range
  var sel, range;
  if (window.getSelection) {
    // For non-IE browsers
    sel = window.getSelection();
    range = sel.getRangeAt(0);
  } else if (document.selection) {
    // For IE8 and below
    range = document.selection.createRange();
  }

  // Delete existing content in the range
  range.deleteContents();

  // Create an element to hold the HTML
  var el = document.createElement("div");
  el.innerHTML = html;
  
  // Create a fragment to insert
  var frag = document.createDocumentFragment();

  // Loop through elements in the div
  while ((node = el.firstChild)) {
    frag.appendChild(node);
  }
  
  // Insert the fragment into the range
  range.insertNode(frag);

  // Position the caret after the inserted content
  range = range.cloneRange();
  range.setStartAfter(frag.lastChild);
  range.collapse(true);
  if (sel) sel.removeAllRanges();
  if (sel) sel.addRange(range);
}
Copier après la connexion

Amélioration

Sur la base des demandes des utilisateurs, une version mise à jour avec un paramètre supplémentaire a été développé :

function pasteHtmlAtCaret(html, selectPastedContent) {
  // ... (same as before)

  // Modify based on parameter
  if (selectPastedContent) {
    range.setStartBefore(frag.firstChild);
  } else {
    range.collapse(true);
  }

  // Update the selection
  sel.removeAllRanges();
  sel.addRange(range);
}
Copier après la connexion

Lorsqu'il est défini sur true, ce paramètre vous permet de sélectionner le contenu inséré lors de l'exécution.

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!

source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal