JavaScriptによるテキスト選択のクリア


122

答えが見つからない簡単な質問:JavaScript(またはjQuery)を使用して、Webページで選択されているテキストの選択を解除するにはどうすればよいですか?EGユーザーがクリックしてドラッグし、少しのテキストを強調表示します。この選択をクリアする関数deselectAll()が必要です。どうやってそれを書こうと思いますか?

助けてくれてありがとう。

回答:


206
if (window.getSelection) {
  if (window.getSelection().empty) {  // Chrome
    window.getSelection().empty();
  } else if (window.getSelection().removeAllRanges) {  // Firefox
    window.getSelection().removeAllRanges();
  }
} else if (document.selection) {  // IE?
  document.selection.empty();
}

Y氏の功績


4
これはdocument.selection、の存在がそのempty()メソッドの存在を意味すると想定しています。他のすべてのケースでメソッドをテストしたのでempty、最後のケースでもテストする可能性があります。
Tim Down

おかげで、私のjquery.tableCheckbox.jsプラグイン内でこれを使用しました。
Marco Kerwitz、2015年

1
私はあなたの提案に基づいて完全に機能する例を作成しましたが、いくつかの追加jsfiddle.net/mkrivan/hohx4nesを追加しています最も重要な行はwindow.getSelection()。addRange(document.createRange());です。このIEがないと、一部の状況でテキストの選択が解除されません。また、メソッド検出の順序を変更しました。
Miklos Krivan

あなたは私の日を私の友達を救います!私はスクラッチパッドを使用していて、ページ全体をスクラッチするときに選択され、この優れたスクリプトを使用して、スクラッチパッドプラグインを使用する前にページの選択を解除しました。基本的には動作します!どうもありがとう!
2017年

1
window.getSelection().removeAllRanges();IE(edge)とSafariで正常に動作することを確認します。
チリ

48

必要な機能を直接テストするのに最適です:

var sel = window.getSelection ? window.getSelection() : document.selection;
if (sel) {
    if (sel.removeAllRanges) {
        sel.removeAllRanges();
    } else if (sel.empty) {
        sel.empty();
    }
}

15

2014年の選択解除問題の状態

私は自分でいくつかの調査を行いました。ここに私が書いて最近使用している関数があります:

(function deselect(){
  var selection = ('getSelection' in window)
    ? window.getSelection()
    : ('selection' in document)
      ? document.selection
      : null;
  if ('removeAllRanges' in selection) selection.removeAllRanges();
  else if ('empty' in selection) selection.empty();
})();

基本的にgetSelection().removeAllRanges()は、現在すべての最新のブラウザー(IE9 +を含む)でサポートされています。これは明らかに正しい方法です。

考慮される互換性の問題:

  • 古いバージョンのChromeとSafariを使用 getSelection().empty()
  • IE8以下を使用 document.selection.empty()

更新

この選択機能を再利用するためにまとめることは、おそらく良い考えです。

function ScSelection(){
  var sel=this;
  var selection = sel.selection = 
    'getSelection' in window
      ? window.getSelection()
      : 'selection' in document
        ? document.selection
        : null;
  sel.deselect = function(){
    if ('removeAllRanges' in selection) selection.removeAllRanges();
    else if ('empty' in selection) selection.empty();
    return sel; // chainable :)
  };
  sel.getParentElement = function(){
    if ('anchorNode' in selection) return selection.anchorNode.parentElement;
    else return selection.createRange().parentElement();
  };
}

// use it
var sel = new ScSelection;
var $parentSection = $(sel.getParentElement()).closest('section');
sel.deselect();

私はこれをコミュニティーwikiにしたので、ユーザーはこれに機能を追加したり、標準の進化に応じて更新したりできます。


7
それは私の答えと同じです。4年間で何も変わっていません。
Tim Down

3
恐ろしい。文字どおり別のポスターから実装を盗んだだけでなく、構文的に完全に破棄しました。
カメルケフ2016年

1

受け入れられた答えは次のとおりですが、2行のコードです。

var selection = window.getSelection ? window.getSelection() : document.selection ? document.selection : null;
if(!!selection) selection.empty ? selection.empty() : selection.removeAllRanges();

のみremoveAllRangesの存在のためである私はしていないチェック-しかし、私の知る限りではどちらか持っている何のブラウザが存在しないwindow.getSelectiondocument.selectionが、ありません持っているのいずれか.emptyまたは.removeAllRangesそのプロパティの。


0

window.getSelection()を使用すると、選択したテキストにアクセスできます。そこから、テキストを操作するために実行できることがいくつかあります。

続きを読む:開発者Mozilla DOM選択


-1

これをスクリプトに追加して、右クリックやテキスト選択を防止します。

例外はvar 'om'に追加できます。

var d=document,om=['input','textarea','select'];;
function ie(){if(d.all){(mg);return false;}}function mz(e){if(d.layers||(d.getElementById&&!d.all)){if(e.which==2||e.which==3){(mg);return false;}}}if(d.layers){d.captureEvents(Event.mousedown);d.onmousedown=mz;}else{d.onmouseup=mz;d.oncontextmenu=ie;}d.oncontextmenu=new Function('return false');om=om.join('|');function ds(e){if(om.indexOf(e.target.tagName.toLowerCase())==-1);return false;}function rn(){return true;}if(typeof d.onselectstart!='undefined')d.onselectstart=new Function('return false');else{d.onmousedown=ds;d.onmouseup=rn;}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.