4

.prop()メソッドが(互換性の理由で)含まれている現在のjQueryに存在するかどうかを次の方法でテストしようとしています。

if(typeof $.prop === 'function')

ドキュメントから理解できるように、上記の条件はtrueのためでjQuery >= 1.6あり、falseのためであると私は期待しますjQuery < 1.6

とにかく、これをjsfiddleでテストすると、次のようになります。

typeof $.prop === 'function'は:

  • trueいつjQuery >= 1.6
  • falseいつjQuery < 1.6 and jQuery > 1.3
  • trueいつjQuery <= 1.3

これは、上記の結果を提供する非常に単純なスクリプトです(jQueryのバージョンを切り替えるだけで、私が説明した内容を確認できます)。

.prop()これをjQuery、つまり1.3で使用しようとすると、.prop is not a functionエラーが発生します。同じ問題がjsfiddleの外部でもテストされています。そのような振る舞いは正常ですか?利用可能かどうかを本当にテストするにはどうすればよい.prop()ですか?

ありがとう

4

3 に答える 3

6

alert(typeof $.fn.prop === 'function')

.propにあるjQueryプロトタイプのメソッドを確認したいとし$.fnます。これは1.3では誤りです。

また、jQueryバージョンの機能検出を避け、代わりに特定のバージョン(およびそれ以降)をサポートします。

于 2011-06-12T17:37:57.390 に答える
6

私がやったことは、propを使用しないjQueryバージョンのpropと互換性のある関数を作成することです。

(function($){
    if (typeof $.fn.prop !== 'function')
    $.fn.prop = function(name, value){
        if (typeof value === 'undefined') {
            return this.attr(name);
        } else {
            return this.attr(name, value);
        }
    };
})(jQuery);

このコードをテストできます:http://jsfiddle.net/JtK2Q

于 2011-12-08T10:25:20.873 に答える
4

静的メソッドの存在を確認しています。

インスタンスメソッドを書くことで確認する必要があります$.fn.prop$.fnと同じ$.prototypeです)。

于 2011-06-12T17:37:11.667 に答える