jQuery如何选中未被<a>标签包裹的<img>实现点击缩放功能
问题原因
你现有筛选逻辑失效的核心原因是:$(this).closest('a') 无论是否匹配到对应<a>元素,都会返回jQuery对象,而jQuery对象本身属于真值,所以!$(this).closest('a')的结果永远为false,筛选条件自然不会生效。
另外你注释掉的$(this).parents().contains('a')写法也有误,contains方法是用来判断指定DOM元素是否是当前元素的后代,不能直接传入标签名做判断。
解决方法
方法1:调整filter回调判断逻辑
判断closest返回的jQuery对象长度是否为0,长度为0就说明当前图片没有被<a>标签包裹:
$(window).load(function(){ $('img').filter(function(){ return $(this).closest('a').length === 0; }).wrap('<span style="display:inline-block"></span>') .css('display', 'block') .parent() .zoom({ on:'click' }); });
方法2:用选择器直接筛选(更简洁)
直接使用jQuery的否定后代选择器,一步选中所有不是<a>标签后代的<img>元素:
$(window).load(function(){ $('img:not(a img)') .wrap('<span style="display:inline-block"></span>') .css('display', 'block') .parent() .zoom({ on:'click' }); });
注意事项
如果你的站点存在动态加载的图片(比如懒加载、异步接口渲染的内容),上述代码只会对页面首次加载完成时已存在的图片生效,后续动态插入的图片需要在插入DOM后单独执行绑定逻辑。
内容的提问来源于stack exchange,提问作者JohnCoderMan
相关产品推荐
相关产品推荐

