jQuery及其范围

jQuery及其范围,jquery,scope,this,Jquery,Scope,This,我在这个函数的范围中缺少了一些东西,我有一个cms,它可以自动将类添加到图像中,但不会改变它们的对齐方式,因此文本不会正确地环绕它们。我不能简单地使用$(“img”).attr(“align”,“left”);因为这会改变页面上的每一张图片,也就是说,使用上下文“img”,它不会像我想象的那样工作,而且完全没有任何作用 function align_image(){ console.log("func called"); if($("img").length){

我在这个函数的范围中缺少了一些东西,我有一个cms,它可以自动将类添加到图像中,但不会改变它们的对齐方式,因此文本不会正确地环绕它们。我不能简单地使用$(“img”).attr(“align”,“left”);因为这会改变页面上的每一张图片,也就是说,使用上下文“img”,它不会像我想象的那样工作,而且完全没有任何作用

function align_image(){
    console.log("func called");
    if($("img").length){
        if($("img").hasClass("alignleft")){
            $("img", this).attr("align","left");
            console.log("aligned left!")
    }

       if($("img").hasClass("alignright")){
           $("img", this).attr("align","right");
           console.log("aligned right!");
       }
   }
}
align_image();
有人知道我如何更改每个img,使其与相关的类保持一致吗?奖励积分,了解其工作原理

编辑:代码笔演示

试试这个。我认为这对你有帮助

试试这个。我认为这对你有帮助


我认为您可以遍历每个图像,迭代器函数引用带有“this”引用的imgdom元素。大概是这样的:

$("img").filter('.align-right').attr("align","right") ;                           
$("img").filter('.align-left').attr("align","left") ;
函数align_image(){
log(“func调用”);
if($(this).hasClass('alignleft')){
$(this.attr(“align”,“left”);
}
if($(this).hasClass('alignright')){
$(this.attr(“align”,“right”);
}
}

$('img')。每个(对齐图像)我认为您可以遍历每个图像,迭代器函数引用带有“this”引用的imgdom元素。大概是这样的:

$("img").filter('.align-right').attr("align","right") ;                           
$("img").filter('.align-left').attr("align","left") ;
函数align_image(){
log(“func调用”);
if($(this).hasClass('alignleft')){
$(this.attr(“align”,“left”);
}
if($(this).hasClass('alignright')){
$(this.attr(“align”,“right”);
}
}

$('img')。每个(对齐图像)您最好使用filter方法查找您的元素并添加如下属性:

$("img").filter('.align-right').attr("align","right") ;                           
$("img").filter('.align-left').attr("align","left") ;

您最好使用filter方法查找您的元素并添加如下属性:

$("img").filter('.align-right').attr("align","right") ;                           
$("img").filter('.align-left').attr("align","left") ;


问题不在于改变图像对齐方式,没有“this”也可以正常工作。问题是,使用我当前的“this”方式不会选择任何内容,如果我不使用“this”,它会选择页面上的每个图像标记并重新对齐。因此,如果我有50个img标记,那么无论最后一个找到的是哪种方式,它们都将对齐;与alignright类类似,问题是没有改变图像对齐方式,没有“this”也可以正常工作问题是,使用我当前的方式“this”不会选择任何内容,如果我不使用“this”,它会选择页面上的每个图像标记并重新对齐。因此,如果我有50个img标记,那么无论最后一个找到的是哪种方式,它们都将对齐;对于alignright类,这是我尝试的第一件事,我认为这会选择它当前正在收听的图像并更改它。在这种情况下,它似乎不知道“这”是什么。你能提供演示吗?然后我可以帮助你。我会尽快制作一个。这是我尝试的第一件事,我想这会选择它当前正在收听的图像并更改它。在这种情况下,它似乎不知道“这”是什么。你能提供演示吗?然后我可以帮助你。我会尽快找到一个。这将遍历所有图像,并检查每个图像中的类。如果您想要一点快捷方式,可以这样做:$('img.alignleft').attr(“align”,“left”)和$('img.alignright').attr(“align”,“right”)。这将使用alignX类在所有img标记上设置align属性。当然,这也可以通过css样式表来完成,对吗?太棒了!我很高兴它起作用了!旁注:实际上我建议使用我在评论中建议的选择器。答案中列出的方法与您的原始逻辑更接近。选择器提供了一种更简洁的方法,通过一个函数调用操作多个DOM元素,我认为这是jQuery最大的优点之一。祝你好运很抱歉,当你说只使用css就可以完成时,我知道文本对齐(这不起作用),但你是说还有其他东西改变了图像的对齐属性吗?我更愿意使用css而不是js。我在这里()发现img“align”属性已被弃用(尽管在主流浏览器中仍然受支持)。它建议对于垂直对齐,使用“垂直对齐”css属性。对于水平对齐,它建议使用“float”css属性(float:left或float:right)。我已经用所有不同的解决方案更新了答案,这些解决方案似乎可以解决这个问题。我希望它们都清晰易懂。这将遍历所有图像,并检查每个图像中的类。如果您想要一点快捷方式,可以这样做:$('img.alignleft').attr(“align”,“left”)和$('img.alignright').attr(“align”,“right”)。这将使用alignX类在所有img标记上设置align属性。当然,这也可以通过css样式表来完成,对吗?太棒了!我很高兴它起作用了!旁注:实际上我建议使用我在评论中建议的选择器。答案中列出的方法与您的原始逻辑更接近。选择器提供了一种更简洁的方法,通过一个函数调用操作多个DOM元素,我认为这是jQuery最大的优点之一。祝你好运很抱歉,当你说只使用css就可以完成时,我知道文本对齐(这不起作用),但你是说还有其他东西改变了图像的对齐属性吗?我更愿意使用css而不是js。我在这里()发现img“align”属性已被弃用(尽管在主流浏览器中仍然受支持)。它建议对于垂直对齐,使用“垂直对齐”css属性。对于水平对齐,它建议使用“float”css属性(float:left或float:right)。我已经用所有不同的解决方案更新了答案,这些解决方案似乎可以解决这个问题。我希望它们都是清晰的