ホームページ  >  記事  >  ウェブフロントエンド  >  Contenteditable DIV のキャレット位置に HTML を挿入するにはどうすればよいですか?

Contenteditable DIV のキャレット位置に HTML を挿入するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-10 00:19:02292ブラウズ

How to Insert HTML into a Contenteditable DIV at the Caret Position?

HTML を Contenteditable DIV のキャレット位置に挿入する

課題:

contenteditable div で、キープレス イベント キャプチャEnter キーが押されたときにテキストを入力できないようにするために使用できます。カーソルを目的の挿入ポイントに置き、HTML (
タグなど) をプレーンテキストとして表示せずに挿入する方法を探します。

解決策:

Range.pasteHTML() の使用は IE で機能しますが、他のブラウザでは HTML タグがテキストとして表示されます。次の関数を使用すると、すべての主要なブラウザに HTML を挿入でき、選択されている場合は既存のテキストを置き換えることができます。

function pasteHtmlAtCaret(html) {
  var sel, range;
  if (window.getSelection) {
    // IE9 and non-IE
    sel = window.getSelection();
    if (sel.getRangeAt && sel.rangeCount) {
      range = sel.getRangeAt(0);
      range.deleteContents();

      // Create a document fragment from the HTML string
      var el = document.createElement("div");
      el.innerHTML = html;
      var frag = document.createDocumentFragment();
      while ((node = el.firstChild)) {
        frag.appendChild(node);
      }

      range.insertNode(frag);

      // Preserve the selection after the inserted content
      if (frag.lastChild) {
        range = range.cloneRange();
        range.setStartAfter(frag.lastChild);
        range.collapse(true);
        sel.removeAllRanges();
        sel.addRange(range);
      }
    }
  } else if (document.selection && document.selection.type != "Control") {
    // IE < 9
    document.selection.createRange().pasteHTML(html);
  }
}

機能強化 (2013 年 8 月):

への応答ユーザーのリクエストに応じて、挿入されたコンテンツを選択するかどうかを指定するパラメーターが追加されました。

function pasteHtmlAtCaret(html, selectPastedContent) {
  // Similar functionality as the original function
  // ...
}

この更新された関数により、HTML コンテンツを挿入した後の選択動作を制御できるようになります。

以上がContenteditable DIV のキャレット位置に HTML を挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。