如何使用jQuery以与$(this)相同的方式选择元素?

如何使用jQuery以与$(this)相同的方式选择元素?,jquery,this,Jquery,This,好的,我有一个(Wordpress支持的)网站,上面有一些图片。我想在这些图像溢出内容分区时缩放它们。为了使它们正确缩放,幸运的是,我可以添加一个类。scaled,它将使图像宽度:100%,这样就可以解决问题了 我的问题是,当我检测一个图像对于页面来说是否太大时,我似乎无法在页面上只选择那个特定的图像 HTML: 现在,对于jQuery。我目前的设置如下: $(window).resize(function() { if($('section .entry-content img').w

好的,我有一个(Wordpress支持的)网站,上面有一些图片。我想在这些图像溢出内容分区时缩放它们。为了使它们正确缩放,幸运的是,我可以添加一个类
。scaled
,它将使图像
宽度:100%,这样就可以解决问题了

我的问题是,当我检测一个图像对于页面来说是否太大时,我似乎无法在页面上只选择那个特定的图像

HTML:

现在,对于jQuery。我目前的设置如下:

$(window).resize(function() {
    if($('section .entry-content img').width() > $('.entry-content').width()) {
        $(this).addClass('scaled')
    }
});
我的问题在于,
$(this)
,就像它经常遇到的那样。我猜它没有选择这里的实际图像,而是选择了其他的东西,或者没有特别的东西

所以我的问题是,用jQuery只选择一个图像并对其应用一个类的最佳方法是什么?我希望看到一些只涉及将
$(this)
更改为其他内容的内容


提前谢谢

一种方法是使用如下变量:

$(window).resize(function() {
  var $img = $('section .entry-content img')[0];
  if($img.width() > $('.entry-content').width()) {
    $img.addClass('scaled')
  }
});

尝试将jQuery方法更改为:

$(window).resize(function() {
    $( "section .entry-content img" ).each(function() {
        if($(this).width() > $('.entry-content').width()) {
            $(this).addClass('scaled')
        }
    });
});

这应该处理每个独立img元素的函数(并且“This”是相对的)。

对于一个函数,这里已经有了很多很好的答案,但我认为值得补充的是,在事件回调函数的上下文中,关键字
this
指的是JQuery传入的DOM元素。因此,在前面的示例中,
$(this)
实际上导致了一个JQuery对象包装
窗口
元素

$(window).on('resize', function() {
    $('section .entry-content img').filter(function() {
        return $(this).width() > $(this).closest('.entry-content').width();
    }).addClass('scaled');
});

因此,正如您在许多其他示例中所看到的,解决方案是更改JQuery对象的选择器,从中使用
this

您处于
$(窗口)
的范围内,if语句不会更改范围。是!这工作完美无瑕,非常感谢!我不应该说我在括号中做了更改,即
$(this).width()之后的括号。那个括号把代码搞乱了,让我惊慌失措。非常感谢你的帮助!:)哦,哎呀,是的,我的打字错误。我已经用修复程序更新了我的原始答案。谢谢
$(window).resize(function() {
    $( "section .entry-content img" ).each(function() {
        if($(this).width() > $('.entry-content').width()) {
            $(this).addClass('scaled')
        }
    });
});
$(window).on('resize', function() {
    $('section .entry-content img').filter(function() {
        return $(this).width() > $(this).closest('.entry-content').width();
    }).addClass('scaled');
});