0

divにスクロールバーがあり、コードのそのビットが機能するかどうかの確認に関するさまざまな投稿を読みました。スクロールバーが存在する場合は、divにクラスを追加する必要がありますが、問題のdivごとにコードを記述する必要はありません。クラスまたはIDを使用してdivに具体的に名前を付けると、コードは機能しますが、「this」を使用して機能させる方法が必要です。

これが私のコードです:

(function($) {
    $.fn.hasScrollBar = function() {
        return this.get(0).scrollHeight > this.innerHeight();
    }
})(jQuery);

$(function(){

if ($('div').hasScrollBar()){
    var scrollObj = $(this);
    scrollObj.addClass('scrollable');
}

});
4

3 に答える 3

1

オプション1

私はあなたがただeach方法が欲しいと思います:

$("div").each(function() {
    if($(this).hasScrollBar()) {
        $(this).addClass('scrollable');
    }
});

オプション2

しかし、賢くなりたい場合は、次の方法でも実行できますfilter

$('div').filter(function() { 
    return $(this).hasScrollBar(); 
}).addClass('scrollable');

jsFiddleのデモ:http://jsfiddle.net/Cg3bv/

オプション3

さらに賢くしたい場合は、hasScrollBarそれ自体をフィルターコールバックとして使用できます。

$('div').filter($.fn.hasScrollBar).addClass('scrollable');

hasScrollbarただし、少し変更する必要があります。

$.fn.hasScrollBar = function() {
    return $(this).get(0).scrollHeight > $(this).innerHeight();
}

私はあなたがそれをこのようにすべきだと思います。this生のDOM要素と$(this)ラップされたjQueryオブジェクトを作成することは、常にすでにラップされていると想定するのとは対照的に、通常のパターンthisです$。さらに、2回ラップすると(つまり$、すでにJQオブジェクトであるものを誤って呼び出すと)、パフォーマンスのオーバーヘッドが発生しますが、完全に機能しなくなることはありません。生のDOMオブジェクトでJQメソッドを呼び出そうとすると、単に失敗します。

jsFiddleのデモ:http://jsfiddle.net/Qd2ZC/

于 2012-12-20T04:02:16.300 に答える
1

を使用しeachてsをループします。divこれにより、正しいが得られますthis

于 2012-12-20T03:51:09.390 に答える
1

あなたができること:

$("div").each(function() {
   if( $(this).hasScrollBar() ) {
      $(this).addClass('scrollable');
   }
});
于 2012-12-20T03:52:51.690 に答える