私は、ユーザーがテキストを選択して黄色で強調表示できるようにする単純な Web アプリを楽しみのために作成しています (または任意の色は関係ありません)。これが私がこれまでに持っているものです:
function replaceSelectedText() {
var sel, range;
var replacementText, spanTag;
if (window.getSelection) {
replacementText = window.getSelection().toString();
spanTag = document.createElement("span");
spanTag.className = "highlighted";
spanTag.appendChild(replacementText);
sel = window.getSelection();
if (sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
//range.insertNode(document.createTextNode(replacementText));
range.insertNode(spanTag);
}
} else if (document.selection && document.selection.createRange) {
replacementText = '<span class="highlighted">' + document.selection.createRange().text + '</span>';
range = document.selection.createRange();
range.text = replacementText;
}
}
document.onmouseup = replaceSelectedText;
document.onkeyup = replaceSelectedText;
選択したフレーズを強調表示する場所で動作させましたが、本文の HTML で replace() 呼び出しを使用しただけだったので、ユーザーが「a」のような一般的な単語を選択すると、「a」の最初の出現がむしろ強調表示されます。彼らがクリックしたものよりも。
これまでのコードで正しい軌道に乗っていますか、それとも replace() 呼び出しを引き続き使用する必要がありますか? 置換は機能するようですが、選択した単語が発生する場所の配列インデックスを取得できないようで、範囲は非常に有用な値を返さないようです。
前もって感謝します。