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

使用 aneach循环遍历divs,这将为您提供正确的this.

于 2012-12-20T03:51:09.390 回答
1

你可以这样做:

$("div").each(function() {
   if( $(this).hasScrollBar() ) {
      $(this).addClass('scrollable');
   }
});
于 2012-12-20T03:52:51.690 回答
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总是$已经被 -wrapped。此外,如果您将其包装两次(即不小心调用$了已经是 JQ 对象的东西),将会有一些性能开销,但不会完全中断。尝试在原始 DOM 对象上调用 JQ 方法只会失败。

jsFiddle 上的演示:http: //jsfiddle.net/Qd2ZC/

于 2012-12-20T04:02:16.300 回答