关于if语句的jquery帮助

关于if语句的jquery帮助,jquery,if-statement,Jquery,If Statement,我正在尝试缩放宽度大于100的图像。我正在使用下面的代码,但它可以缩放甚至低于100px的图像。。。我做错了什么 if($(".image-attach-body")) { if($(".image-attach-body a")) { $(".image-attach-body a").each(function() { var width = $("span span img").width(); if(wid

我正在尝试缩放宽度大于100的图像。我正在使用下面的代码,但它可以缩放甚至低于100px的图像。。。我做错了什么

if($(".image-attach-body")) {
    if($(".image-attach-body a")) {
    $(".image-attach-body a").each(function() {
                var width = $("span span img").width();

                if(width > 100) {
                    $("span span img").cjObjectScaler({
                            destObj: $(".image-attach-body"),
                                method: "fit",
                });
                }
    }); 
    }
}

尝试将整个内容包装在
$(document.load()中,图像可能还不在那里

$(document).load( function () {
 if($(".image-attach-body")) {
        $(".image-attach-body a").each(function() {
         var img = $("span span img",this);

         if(img.width() > 100) {
           img.cjObjectScaler({
             destObj: $(".image-attach-body"),
             method: "fit"
           });
         }
       });

 }

}))

如果您的所有图像都小于100,那么您的代码将正常工作。下面是有问题的代码行

$("span span img").cjObjectScaler
此选择器位于每个循环的内部。因此,如果只有一个图像大于100,则对所有图像调用此函数。函数调用应用于与选择器匹配的每个元素(jQuery就是这样工作的)

我不知道您的标记是什么样子的,所以我无法告诉您将代码更改为什么。在每个循环中,您可能需要在选择器中的某个位置使用
,以便它更具体、更相关于给定的上下文

我想应该改成这个

$("span span img", this).cjObjectScaler

编辑:您还需要更改代码行,以便在获取图像宽度时执行此操作,因为这将始终只返回找到的第一个图像的宽度。我建议将其存储在一个局部变量中,这样以后在应用“scaler”时就不必重新查询它了。主要问题是,您没有确定搜索范围,因此最终的
$('span-img')
将在页面中查找所有
img
。下面是一个函数,它还修复了一些其他问题。请询问这是否有意义:

if( $(".image-attach-body").length ) {
    $(".image-attach-body a").each(function() {
        var $img = $("span span img", this),
            width = $img.width();

        if(width > 100) {
            $img.cjObjectScaler({
                destObj: $img.closest(".image-attach-body"),
                method: "fit",
            });
        }
    }); 
}
注意:您的第一个
if
语句将始终返回
true
,因为如果未找到任何内容,它将返回空的jQuery对象,而不是您可能期望的
null
。因此,将其更改为
.length
将验证是否至少找到1。第二个
if
语句(我删除了它)是不必要的,因为如果没有匹配的对象,
每个
循环都会运行
0次,所以测试被浪费了。。。和第一个一样,它总是运行。

我认为你的width()函数总是在计算你的第一张图像。请尝试以下方法:

if($(".image-attach-body")) {
    if($(".image-attach-body a")) {
    $(".image-attach-body a").each(function() {
    var width = $("span span img",$(this)).width();

选择器存在一些问题,以及width命令仅返回选择器中第一个元素的宽度

事实上,我建议您将代码更改为以下内容:

$(".image-attach-body a").each(function() {
    var images = $("span span img").filter(function() {
        return this.width > 100;
    });

    images.cjObjectScaler({
        destObj: $(".image-attach-body"),
        method: "fit"
    });
});

看到我不知道
cjObjectScaler
函数从何而来,我做了此更改(基于您的代码…)

$(“span img”)
选择整个页面中的图像,而不是相对于当前范围

此外,在使用
每个
之前,不必测试jQuery。此方法对空jQuery不执行任何操作,因此您的代码可以简化为:

// For each attach body in document
$(".image-attach-body").each(function(attachBody)
{
    // For each image in the attach body
    $("a span span img", attachBody).each(function() 
    {
        // If image is too large
        if( $(this).width() > 100 )
        {
            // Scale to attach body
            $(this).cjObjectScaler({
                destObj: $(attachBody),
                method: "fit",
            });
        }
    });
});

如果您包含了一些您正在操作的HTML,这会很有帮助。在“fit”后面的逗号不应该出现。我想这只是一个输入错误…像素线:JavaScript/ECMAScript规范允许您在数组的末尾添加逗号。但是,IE7及以下版本没有。不,它是。。。事实上,如果我加入alert(宽度),它会显示每个图像的宽度。。。而且,它在$(document)中。ready(function(){}在加载所有图像之前,文档已准备就绪。呈现警报所需的时间可能会改变一些事情…尝试从ready(…)更改为load(…),如果这不起作用,那么发布html,我们将看到发生了什么。当您说“它显示了每个图像的宽度”时你的意思是在几个警告框中,还是在一个警告框中,比如说,4张图片上写着“153100290444”?我的意思是,例如,我有两张图片,我得到两个警告框,一个是240,另一个是16,但它只在图片附件主体a中查找span-span-img…对吗?不,你必须做$(这个)。查找(“span-span-img”)或者简单地说$(“span img”,这个)有一个有限的范围我尝试了这个,但是我得到了一个$img。最近的不是函数错误吗?
// For each attach body in document
$(".image-attach-body").each(function(attachBody)
{
    // For each image in the attach body
    $("a span span img", attachBody).each(function() 
    {
        // If image is too large
        if( $(this).width() > 100 )
        {
            // Scale to attach body
            $(this).cjObjectScaler({
                destObj: $(attachBody),
                method: "fit",
            });
        }
    });
});