以父元素为目标,但不知道子元素和父元素之间有多少节点
Target an parent element but without knowing how many nodes are in between child and parent
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
使用.closest()来执行
对于集合中的每个元素,获取与选择器,方法是测试元素本身并向上遍历其DOM树中的祖先。
$(this).closest('.SomeWrapper').parent().animate({opacity: '1'},{duration: settings.fadeSpeed});
根据文件:
parents()和parent()方法相似,只是后者只在DOM树上移动一个级别。
因此,在您的情况下,您可以使用:
$(this).parents(".SomeWrapper").animate({opacity: '1'},{duration: settings.fadeSpeed});
UPD:根据更改后的问题:
edit:$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));
您需要使用closest()
来获得.SomeWrapper
元素,然后使用parent()
在DOM中再提升1级。试试这个:
$obj.find("img").load(function(){
$(this).closest('.SomeWrapper').parent().animate({ opacity: '1' },{ duration: settings.fadeSpeed });
});
假设"somewrapper"的子级都没有相同的类名,则可以使用.closest()方法。
您可以使用这个:
$(this).parents('SomeWrapper')
- 操作放置在画布上的元素之间的连接
- DOM元素和angular元素之间的主要区别是什么
- 在 JavaScript 数组中的所有元素之间穿插元素的简洁方法
- JS get元素之间的差异's属性与elem.getAttribute(attr)和elem[attr]
- Javascript集:任何覆盖元素之间比较的方法
- jqmobile列表视图中元素之间的间距相等
- 如何在两个动画画布元素之间进行通信
- 第一个元素和最后一个元素之间的连续循环
- 在元素之间导航的Javascript
- 在照片库中的两个元素之间切换样式会发生变化
- 计数元素之间的语法混淆
- jquery多次在元素之间插入html
- javascript,两个数组的相同元素之间的比较
- 3个元素之间的自动切换
- 如何使用jQuery在两个元素之间切换类
- 自定义元素之间的聚合物双向结合[包括示例]
- 使用setTimeout在创建新元素之间强制延迟
- 在javascript数组元素之间添加换行符
- 获取2个元素之间的元素
- 如何不断检查页面元素之间的冲突