web-dev-qa-db-ja.com

jQueryのダブルクリックでテキストの強調表示を無効にします

このjQueryトグルがあります。それはうまく動作します。

   <ul>
    <li>Go to the store</li>
    <li>Pick up dinner</li>
    <li>Debug crash</li>
    <li>Take a jog</li>
  </ul>

        $("li").toggle(
          function () {
            $(this).css({"list-style-type":"disc", "color":"blue"});
          },
          function () {
            $(this).css({"list-style-type":"disc", "color":"red"});
          },
          function () {
            $(this).css({"list-style-type":"", "color":""});
          }
        );

問題は、高速クリックすると、その中のテキストが強調表示されることです。テキストが強調表示されないようにする方法はありますか?

51
Reigel

デスクから離れてiPhoneで書いていますが、簡単なGoogleがこのページを表示しました: jQueryでテキスト選択を無効にする


'dead link'コメント(@Herb Caudillから)への応答として編集。元のリンクは確かに死んでいますが、サイトの再構築(削除ではなく)によるものと思われ、記事の新しい場所はここにあります: http://chris-barr.com/ index.php/entry/disable_text_selection_with_jquery /

そして、その記事で提供されているコードを以下に再現します。

$(function(){
    $.extend($.fn.disableTextSelect = function() {
        return this.each(function(){
            if($.browser.mozilla){//Firefox
                $(this).css('MozUserSelect','none');
            }else if($.browser.msie){//IE
                $(this).bind('selectstart',function(){return false;});
            }else{//Opera, etc.
                $(this).mousedown(function(){return false;});
            }
        });
    });
    $('.noSelect').disableTextSelect();//No text selection on elements with a class of 'noSelect'
});

Chris-Barr、chris-barr.com によって記述されたjQueryスニペット、21日金曜日にアクセスst 2011年1月。

52
David Thomas

非標準のCSSキーワード ser-select を使用してこれを解決しました。

.unselectable {
  -moz-user-select: none;
  -webkit-user-select: none;
  -ms-user-select: none;
}
36
Sjoerd

JQuery UIを使用する場合、次のように簡単なテキスト選択を無効にできます。

$("body").disableSelection();
36
VisioN
//function to be reused later
function clearSelection() {
  var sel ;
  if(document.selection && document.selection.empty){
    document.selection.empty() ;
  } else if(window.getSelection) {
    sel=window.getSelection();
    if(sel && sel.removeAllRanges)
      sel.removeAllRanges() ;
  }
}

$('p').click(clearSelection);

ソース

10
Alex Bagnolini

私は同じ問題を抱えており、これは私のために働いた:

li.noselection::selection {
    background-color: transparent;
}

Chrome、Firefox、EdgeおよびIE 7から10でテストしました。

追伸これは「視覚効果」のみを無効にし、テキストは選択されたままです。あなたの問題が審美的なだけであれば、この解決策は100%機能するので、これが投票された理由です。

7
nonzaprej

1.9.xより上のjQueryバージョンを使用するには

[〜#〜] html [〜#〜]

上記のHTMLマークアップ:

<ul>
    <li>Go to the store</li>
    <li>Pick up dinner</li>
    <li>Debug crash</li>
    <li>Take a jog</li>
</ul>

[〜#〜] js [〜#〜]

return falseの代わりにpreventDefault()を使用して、他のハンドラを殺さない

$('li').on('selectstart', function (event) {
    event.preventDefault();
});

例: jsFiddle

3
Lahmizzar
$( 'selector' ).on( 'selectstart', 'selector', function( ) { 
  return false; 
}).css( 'MozUserSelect','none' ).mousedown( function( ) {
  return false;
}); 

セレクタを独自のものに置き換えます-このコードはすべてのブラウザで正常に機能します。 DOMに動的に挿入された要素に.on()を使用する

0
pelister
document.onselectstart = function() { return false; }
document.onmousedown = function() { return false; }
0
Mike Furlender
window.getSelection().empty()

選択範囲をすばやくフラッシュしますが、Chromeでは問題なく動作します。

0
tim