0

HTML 可能是:

<div class="SomeWrapper">
    <img scr="img2.jpg" />
    <img scr="img3.jpg" />
    <img scr="img4.jpg" />
    <img scr="img5.jpg" />
</div>

或者它可能是

<div class="SomeWrapper">
    <li><a href="#"><img scr="img1.jpg" /></a></li>
    <li><a href="#"><img scr="img2.jpg" /></a></li>
    <li><a href="#"><img scr="img3.jpg" /></a></li>
    <li><a href="#"><img scr="img4.jpg" /></a></li>
    <li><a href="#"><img scr="img5.jpg" /></a></li>
</div>

我的 javascript 正在检查加载的图像。在加载图像时,它希望对“SomeWrapper” div 之后的第一个父元素(而不是图像本身)应用一些效果。

通常我会做类似的事情,.parent().parent()但我并不总是知道图像会有多少父母。

$obj.find("img").load(function(){
    $(this).parent().animate({opacity: '1'},{duration: settings.fadeSpeed});
});

我怎样才能以正确的父母代替$(this).parent()上面的目标?

编辑$obj恰好是我想要定位的元素

编辑1:我不知道父类名称的值,在这种情况下是“.SomeWrapper”,所以我不能使用 $(".SomeWrapper")

我可以通过从 DOM 中获取该值来获得该值,但我更喜欢不依赖硬编码类或 id 的相对解决方案

编辑2:这是实际文件

https://github.com/ed-lea/jquery-collagePlus/blob/f4fb3f12750394acdd627fc4d2f2aa3a5091e17d/examples/example-size-in-tag.html

在这里我想替换它,.parent().parent()因为它是一个动态值https://github.com/ed-lea/jquery-collagePlus/blob/f4fb3f12750394acdd627fc4d2f2aa3a5091e17d/jquery.collagePlus.js#L316

4

5 回答 5

4

使用.closest()来做到这一点

对于集合中的每个元素,通过测试元素本身并向上遍历其在 DOM 树中的祖先来获取与选择器匹配的第一个元素。

$(this).closest('.SomeWrapper').parent().animate({opacity: '1'},{duration: settings.fadeSpeed});
于 2013-08-14T14:03:22.257 回答
2

JQuery 也有 .parents( [selector ] ) 方法

根据文档:

.parents() 和 .parent() 方法是相似的,只是后者只在 DOM 树上向上移动一层。

因此,在您的情况下,您可以使用:

$(this).parents(".SomeWrapper").animate({opacity: '1'},{duration: settings.fadeSpeed});

UPD:根据更改的问题:

编辑: $obj 恰好是我想要定位的元素

关于什么:

$obj.find("img").load(function(){
    $obj.animate({opacity: '1'},{duration: settings.fadeSpeed});
}); 

如果你有循环,你可以使用闭包:

$obj.find("img").load(function(target) {
     return function(){
         target.animate({opacity: '1'},{duration: settings.fadeSpeed});
     }
}($obj)); 
于 2013-08-14T14:05:43.603 回答
0

您需要使用closest()来获取.SomeWrapper元素,然后parent()在 DOM 中再上一层。尝试这个:

$obj.find("img").load(function(){
    $(this).closest('.SomeWrapper').parent().animate({ opacity: '1' },{ duration: settings.fadeSpeed });
});
于 2013-08-14T14:04:42.453 回答
0

假设 'somewrapper' 的所有子级都没有相同的类名,您可以使用 .closest() 方法。

于 2013-08-14T14:05:01.280 回答
0

你可以使用这个:

$(this).parents('SomeWrapper')
于 2013-08-14T14:05:49.800 回答