ホームページ >ウェブフロントエンド >jsチュートリアル >ContentEditable Div のキャレットに HTML を挿入するにはどうすればよいですか?

ContentEditable Div のキャレットに HTML を挿入するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-11 07:38:03556ブラウズ

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

Contenteditable Div のキャレットに Html を挿入

contenteditable div でキー入力をキャプチャすると、不要な文字の挿入を防ぐことができます。これにより、
タグなどの HTML 要素を直接挿入する必要が生じます。 contenteditable div にテキストを挿入するために提供されるソリューションは、IE では range.pasteHTML メソッドを使用して機能しますが、他のブラウザでは
タグをプレーン テキストとしてレンダリングします。

insertNode() を使用した HTML の挿入

ほとんどのブラウザでは、選択範囲から取得した Range の insertNode() メソッドを利用して HTML ノードを挿入できます。 9 より前の IE バージョンでは、引き続き pastHTML() がサポートされています。

HTML を挿入する関数

次の関数を使用して、すべての主要なブラウザのキャレットに HTML を挿入できます。

function pasteHtmlAtCaret(html) {
  var sel, range;
  if (window.getSelection) {
    sel = window.getSelection();
    if (sel.getRangeAt && sel.rangeCount) {
      range = sel.getRangeAt(0);
      range.deleteContents();
      var el = document.createElement("div");
      el.innerHTML = html;
      var frag = document.createDocumentFragment(), node, lastNode;
      while ((node = el.firstChild)) {
        lastNode = frag.appendChild(node);
      }
      range.insertNode(frag);
      if (lastNode) {
        range = range.cloneRange();
        range.setStartAfter(lastNode);
        range.collapse(true);
        sel.removeAllRanges();
        sel.addRange(range);
      }
    }
  } else if (document.selection && document.selection.type != "Control") {
    document.selection.createRange().pasteHTML(html);
  }
}

更新: 挿入されたコンテンツの選択

挿入後に挿入されたコンテンツを選択するシナリオの場合、以下に示すように追加パラメーターを使用して関数を更新できます。 :

function pasteHtmlAtCaret(html, selectPastedContent) {
  // Implementation with logic for selecting the inserted content if selectPastedContent is true
}

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

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