この記事で分かること
document.getSelection()から選択文字列を取り出す方法- 選択していないときの扱いと、返り値の違い
- ページ上で試せる、選択した語句を使った検索例
- 入力欄やハイライト機能で気を付けること
- 公式資料と、次に学ぶ記事
ページ上の文字を選び、その文字をJavaScriptで使いたいときは、document.getSelection()を使えます。ただし、このメソッドが返すのは選択文字列そのものではありません。返り値から文字列を取り出す手順を、試せる例と一緒に説明します。
Webページに動きや操作を加えるために使う言葉です。ページ上の文字を取得したり、ボタンを押したときの処理を決めたりできます。
ひとまとまりのデータに対して呼び出せる操作です。この例では、
toString()がSelectionオブジェクトに対する操作です。
document.getSelection()は何を返す?
document.getSelection()が返すのは、選択範囲を表すSelectionオブジェクトです。選択文字列を使いたい場合は、返り値にtoString()を呼び出して文字列を取り出します。
関連する情報や操作をひとまとめにしたものです。選択範囲を表すものには、選択された文字だけでなく、選択範囲に関する情報も含まれます。
ページ上で選ばれている範囲を表すものです。選択された文字そのものとは別のもので、文字を使うには
toString()で取り出します。
「こんにちは」や「JavaScript」のような、文字が並んだデータのことです。
const selection = document.getSelection();
const selectedText = selection ? selection.toString() : "";
selectionにはSelectionオブジェクトが入り、selectedTextには取り出した文字列が入ります。選択範囲が取得できない場合に備え、2行目では空の文字列を使う形にしています。
Selectionオブジェクトは、選ばれた文字だけでなく選択範囲の情報も持つため、文字列として使うときには取り出す操作が必要です。文字列にすれば、検索語として調べたり、画面に表示したりできます。
document.getSelection()?.toString()のように文字列を取り出します。選択範囲を表す情報と、実際に使う文字列を分けて考えるのがポイントです。
未選択時と選択範囲の扱い
ページ上で文字を選んでいないときも、通常はSelectionオブジェクトが返り、その文字列化の結果は空になります。カーソルだけが置かれた状態でも、選択文字列は空です。選択範囲を取得できない状況ではnullが返ることもあるため、コードでは両方を考慮します。
値がないことを表す特別な値です。空の文字列とは異なり、「文字が0個ある」のではなく「値がない」状態を示します。
選択範囲の情報には、選択した文字のほか、どこからどこまでを選んだかなどが含まれます。文章の一部だけを選んだ場合も、複数の部分にまたがる場合も、文字列として取り出した結果を確認して使いましょう。
ページ上で選び始めた場所から、選び終えた場所までのことです。文字が選ばれていないときは、範囲の長さが0の場合もあります。
document.getSelection()だけでは取得できない場合があります。入力欄内の選択文字を扱う場合は、その入力欄専用の選択範囲の機能を使ってください。
選択した語句で検索するコード例
次の例では、ページ内の文章から文字を選び、ボタンを押すと、その語句が別の文章に含まれているかを表示します。HTMLファイルとして保存してブラウザで開き、文章中の「選択範囲」という語を選んで試してください。
押すと、決められた処理を始める画面上の部品です。
Webページに文章やボタンなどを置き、ページの内容を組み立てるための書き方です。
Webページを見るためのアプリです。Google ChromeやSafariなどがあります。
<!doctype html>
<html lang="ja">
<meta charset="utf-8">
<title>選択した語句を検索する例</title>
<p>ページ上の選択範囲から文字を取り出します。</p>
<button id="searchButton">選んだ語句を検索</button>
<p id="result">文章中の「選択範囲」が見つかるか調べます。</p>
<script>
const button = document.getElementById("searchButton");
const result = document.getElementById("result");
button.addEventListener("click", () => {
const selection = document.getSelection();
const selectedText = selection ? selection.toString().trim() : "";
if (selectedText === "") {
result.textContent = "先にページ上の文字を選んでください。";
return;
}
const targetText = "ページ上の選択範囲から文字を取り出します。";
const found = targetText.includes(selectedText);
result.textContent = found
? `「${selectedText}」が文章中に見つかりました。`
: `「${selectedText}」は文章中に見つかりませんでした。`;
});
</script>
</html>
コードの流れは、ページ上の選択範囲を取得し、文字列に変換して、検索対象の文章に含まれるか調べる順です。

コードには、ページの部品を探すgetElementById()、ボタンを押したときの処理を登録するaddEventListener()、文章を取り出すtextContentを使っています。
ページ内で指定した名前(id)が付いた部品を探す機能です。この例では、ボタンと結果表示を見つけるために使っています。
ボタンを押したなどの操作が起きたときに、実行する処理を登録する機能です。この例では、ボタンが押された後に検索を始めます。
操作と結果:文章中の「選択範囲」を選んでボタンを押すと、「『選択範囲』が文章中に見つかりました。」と表示されます。文字を選ばずに押すと、先に文字を選ぶよう案内が表示されます。
文字列として扱えないときの原因と直し方
よくある間違いは、Selectionオブジェクトを文字列だと思い込み、文字列用の検索機能を直接呼び出すことです。文字列に対するincludes()をSelectionオブジェクトに使うと、期待した検索にはなりません。
ある文字列の中に、指定した文字列が含まれているかを調べる機能です。含まれているときは
true、含まれていないときはfalseになります。
修正前:Selectionオブジェクトに文字列用の検索を行っています。
const selection = document.getSelection();
const found = selection.includes("選択範囲");
修正後:toString()で文字列を取り出してから検索します。
const selection = document.getSelection();
const selectedText = selection ? selection.toString() : "";
const found = selectedText.includes("選択範囲");
結果の見方:選択した文字に「選択範囲」が含まれていれば、foundはtrueになります。何も選んでいない場合は空の文字列を検索するため、先に空文字列かどうかを確かめる処理を入れてください。
検索・コピー・ハイライトに使うときの注意
検索に使う
検索では、選択範囲から文字列を取り出してから、検索先の文章と照らし合わせます。上の例は、選択した語句が決められた文章に含まれるかを調べる小さな例です。Webサイト全体を検索する機能ではありません。
コピーに使う
選択文字列を画面に表示したり、別の処理に渡したりすることはできます。ただし、文字列を取得することと、利用者の端末のクリップボードへコピーすることは別の処理です。コピー機能を追加する場合は、ブラウザの権限や利用条件も別途確認してください。
コピーした文字や画像を一時的に置いておき、別の場所へ貼り付けるための場所です。
ハイライトに使う
文字に色を付けるなどして、目立たせることです。
選択文字列と同じ文字をページ内から探すだけでは、利用者が選んだ場所を正確に目立たせられるとは限りません。同じ語句が何度もある場合や、選択範囲が複数のページ部品にまたがる場合は、別の場所まで対象になる可能性があります。
選択中の範囲を見た目で強調したい場合と、選択文字列と同じ語句をページ内で探して強調したい場合は、目的が異なります。ページの内容を書き換えて強調する実装は、選択範囲やページの動きに影響することがあるため、単純な文字列の置き換えだけで作らないようにしましょう。
仕様を確認するときの資料
document.getSelection()の返り値や選択範囲の扱いは、次の資料で確認できます。実際に使うブラウザでの対応状況は、対象のブラウザと版を決めたうえで確認してください。
JavaScriptの学習を続ける
この機能は、ページの内容をJavaScriptから扱う学習の一部です。ページの仕組みを順番に学ぶ場合は、DOMの学習ガイドから進められます。
Webページの文章やボタンなどを、JavaScriptから見つけたり変更したりできるようにした仕組みです。
よくある質問(FAQ)
document.getSelection()は文字列を返しますか?
いいえ、選択範囲を表すSelectionオブジェクトを返します。選択文字列が必要な場合は、toString()で取り出してください。
文字を選んでいないときは空文字列が返りますか?
返り値は通常Selectionオブジェクトで、文字列化した結果が空になります。選択範囲を取得できない場合のnullも考慮し、文字列を使う前に確認してください。
ページ上の画像や入力欄で選んだ内容も取得できますか?
画像そのものは文字列として取り出せません。入力欄や複数行の入力欄で選んだ文字は、このメソッドだけでは取得できない場合があるため、入力欄専用の選択範囲の機能を確認してください。
Selectionオブジェクトにincludes()を使えますか?
文字列を検索する目的では、先にtoString()で文字列を取り出してください。その後で文字列のincludes()を使います。
選択した文字と同じ文字をハイライトすれば、選んだ場所を強調できますか?
同じ文字が複数ある場合など、選んだ場所とは別の箇所まで対象になることがあります。文字列の一致だけで、元の選択範囲を正確に示せるとは限りません。
スマートフォンでも同じように使えますか?
選択操作や対応状況は、端末やブラウザによって確認が必要です。公開前に対象とする端末・ブラウザで操作を試してください。
まとめ
document.getSelection()は選択範囲を表すSelectionオブジェクトを返す- 選択文字列は
toString()で取り出す - 未選択時は文字列化した結果が空になるため、空かどうかを確認する
- 入力欄の選択やハイライトは、別の扱いが必要な場合がある
- ブラウザごとの動作は、対象環境で確認する
まずは例を動かし、文字を選んだときと選ばないときの表示を比べてみてください。ページ操作の全体像を知りたい場合は、ロードマップから学習を続けられます。

