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

ContentEditable Div のカーソル位置に HTML を挿入するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-11 03:42:02658ブラウズ

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

ContentEditable Div のカーソル位置に HTML を挿入

編集可能な Div を操作する場合、HTML を直接挿入したい場合があります。カーソル。 insertText() のようなメソッドはプレーン テキストを追加できますが、ブラウザは通常、この方法で挿入された HTML を実行するのではなく、テキストとして表示します。

この制限を克服するには、より複雑なアプローチが必要です。解決策の 1 つは、Range オブジェクトの insertNode() メソッドを利用することです。ただし、IE8 以前は、pasteHTML() に依存します。

実装

次の関数は、主要なブラウザ間での HTML 挿入を処理します:

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);
}

改善

ユーザーの要望に基づいて、追加のパラメーターを備えた更新バージョンが開発されました:

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);
}

このパラメーターを true に設定すると、実行時に挿入されたコンテンツを選択できるようになります。

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

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