在jQuery中,'this'在if语句中引用了什么

时间:2014-10-25 17:26:28

标签: jquery

在下面的jQuery中,

    $('.filter').click(function() {
        if ($('.this-div').hasClass('on-display')) {
            $(this).show;
        } else {
            $('.this-div').hide();
        }

然后第3行的'this'是指第一个.filter,还是.this-div?

如果它没有引用.this-div,我怎么能把第2-6行基本上读成:

如果带有.this-div类的页面上的一个div也有一个.on-display类,那么显示div(和其他匹配的)。否则,隐藏它。

3 个答案:

答案 0 :(得分:0)

使用javascript的常规范围规则,它只是您拥有事件监听器的过滤器元素。

答案 1 :(得分:0)

this指的是包含' .filter'的jQuery对象。因为this不受if语句的影响(它受函数上下文的影响)。

为了让代码按照您的意愿行事,我会使用jQuery' s .each()

$('.filter').click(function() {
    $('.this-div').each(function(index){
        if ($(this).hasClass('on-display')) {
            $(this).show();
        } else {
            $(this).hide();
        }
    });
});

答案 2 :(得分:0)

在您的示例中,this引用.filter类,因为将click事件分配给它传递匿名函数。 使用Jquery必须包含包含.this-div

的元素的一般列表
var $divs = $( "div:has('.this-div')" ); 

here约有has个功能。 然后过滤包含.on-display的元素:

var $res = $divs.filter("div:has('.on-display')");