2

かつて、スパンの内容を「ワンクリックで選択」できるスクリプトを書いた男がいました。彼のコードは、jQuery のブラウザー検出を使用して、万能の$に依存していました。それは魅力のように機能しました。

そんなある日、jQuery 1.9がリリースされ、彼のコードと心は壊れてしまいました。ブラウザ検出は伝説のものに追いやられ、二度と見られることはありませんでした. そこで彼は新しい方法を探し、Modernizrライブラリにたどり着きました。それはクールで、徹底的で、彼が望んでいるように見えました。残念ながら、そうではありませんでした。

このライブラリには、ブラウザがDOM Rangeオブジェクトをサポートしているかどうかを検出するという、彼が望んでいた機能が1 つ欠けていました。彼はこの奇妙な見落としに当惑している. きっと彼にはどこか欠けているものがある。

DOM Rangeの機能検出を行うための適切なツールを見つけるのを手伝ってもらえますか?

4

3 に答える 3

1

このコードで十分でしょうか?

var supportsRange = typeof Range === 'object' && typeof document.createRange === 'function' && typeof Selection === 'object' &&  typeof Selection.prototype.getRangeAt === 'function';

if ( supportsRange ) {
    //
}
于 2013-02-26T13:17:19.997 に答える
1

必要なものを検出するだけです。以下は、いくつかの仮定 (たとえば、Range および選択方法の存在document.createRange()および存在を暗示する) を行っていますが、妥当な妥協点です。window.getSelection()

デモ: http://jsfiddle.net/dCvgU/

コード:

$("span").click(function() {
    var body = document.body, range, sel;
    if (typeof document.createRange != "undefined" &&
            typeof window.getSelection != "undefined") {
        range = document.createRange();
        range.selectNode(this);
        sel = window.getSelection();
        sel.removeAllRanges();
        sel.addRange(range);
    } else if (typeof body.createTextRange != "undefined") {
        range = body.createTextRange();
        range.moveToElementText(el);
        range.select();
    }
});
于 2013-02-27T09:55:41.947 に答える
0

完全を期すために、jquery プラグインとしてラップされた 2 つの回答のより完全なバージョンを次に示します。プラグインは、すべての主要なブラウザをサポートしています。

(これは coffescript にあります。js コードの場合は js2coffee に移動します)

$.fn.selectText = () ->
  @each ->
    text = this
    # FF, Chrome, IE9+, and hopefully Opera
    if document.createRange? and window.getSelection?
      selection = window.getSelection()
      range = document.createRange()
      range.selectNodeContents text
      selection.removeAllRanges()
      selection.addRange range
    # <= IE8
    else if document.body.createTextRange?
      range = document.body.createTextRange()
      range.moveToElementText text
      range.select()
    # Safari
    else if window.getSelection?
      selection = window.getSelection()
      selection.setBaseAndExtent text, 0, text, 1
于 2013-02-27T17:47:02.930 に答える