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 : 这是实际的文件
我希望将.parent().parent()
替换为动态值https://github.com/ed-lea/jquery-collagePlus/blob/f4fb3f12750394acdd627fc4d2f2aa3a5091e17d/jquery.collagePlus.js#L316
答案 0 :(得分:4)
使用.closest()来执行此操作
对于集合中的每个元素,获取与之匹配的第一个元素 选择器通过测试元素本身并遍历其中 DOM树中的祖先。
$(this).closest('.SomeWrapper').parent().animate({opacity: '1'},{duration: settings.fadeSpeed});
答案 1 :(得分: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));
答案 2 :(得分:0)
您需要使用closest()
来获取.SomeWrapper
元素,然后parent()
在DOM中进一步提升1级。试试这个:
$obj.find("img").load(function(){
$(this).closest('.SomeWrapper').parent().animate({ opacity: '1' },{ duration: settings.fadeSpeed });
});
答案 3 :(得分:0)
假设'somewrapper'的子节点都没有相同的类名,可以使用.closest()方法。
答案 4 :(得分:0)
你可以用这个:
$(this).parents('SomeWrapper')