1

純粋な JS テキスト ハイライト スクリプトを jQuery に変換する作業を行っていますが、jQuery と同等のものを見つけようとしていinsertNodeます。

var selection = window.getSelection().getRangeAt(0);
var selectedText = selection.extractContents();
var span = document.createElement("span");
span.style.backgroundColor = "yellow";
span.appendChild(selectedText);
selection.insertNode(span);

私は以下を使用できると考えました:

var span = $("<span class='highlight'>" + selectedText + "</span>");
selection.insertNode(span);

結果は次のとおりです。

NOT_FOUND_ERR: DOM Exception 8: An attempt was made to reference a Node in a context where it does not exist.
4

3 に答える 3

3

jQuery がセレクションを操作できるとは思わないので、通常の JS メソッドを使用する必要があります。spanノードではなくjQueryオブジェクトであるため、エラーが発生しています。

また、selection.extractContents()文字列ではなく DocumentFragment を返します。だからこれを試してください:

var selection = window.getSelection().getRangeAt(0);
var selectedText = selection.extractContents();
var span = $("<span class='highlight'>" + selectedText.textContent + "</span>");
selection.insertNode(span[0]); // pass the first node in the jQuery object
于 2013-03-05T21:29:13.933 に答える
0

prepend() または append() または insertAfter() または insertAt() を使用します

$(selection).append();

于 2013-03-05T21:28:06.313 に答える
0

jQuery オブジェクトではなく、要素を挿入します。

selection.insertNode(span[0]);
于 2013-03-05T21:30:48.333 に答える