jQuery .each()over .wp-caption

当存在标题时,WordPress会向.wp-caption容器添加额外的10px。 我正在尝试使用jQuery删除额外的10px。 由于这个问题的答案,我已经能够做到这一点 ,但我意识到b / c有时会在post中有多个图像,我需要使用某些东西来实现.each()的迭代效果。 下面的代码适用于第一张图像,但后来错误地将第一张图像应用于第二张图像的容器。 如何更正.each()才能正常工作?

 jQuery().ready(function() { jQuery(".wp-caption").each(function(n) { var width = jQuery(".wp-caption img").width(); jQuery(".wp-caption").width(width); }); }); 

示例w / javascript on

示例w / javascript off

更新:以下最简化的解决方案:

 jQuery().ready(function( $ ) { $(".wp-caption").width(function() { return $('img', this).width(); }); }); 

或者用$ jQuery替换$以防止冲突:

 jQuery().ready(function( jQuery ) { jQuery(".wp-caption").width(function() { return jQuery('img', this).width(); }); }); 

两者都有效! =)

this是对.each()当前元素的引用。

 jQuery().ready(function( $ ) { $(".wp-caption").each(function(n) { var width = $(this).find("img").width(); $(this).width(width); }); }); 

…因此,您可以使用find() [docs]方法获取后代及其width()

您也可以将函数直接传递给width() ,它将为您迭代。

 jQuery().ready(function( $ ) { $(".wp-caption").width(function(i,val) { return $(this).find("img").width(); }); }); 

…这里,函数的返回值将是设置为当前.wp-caption的宽度。


编辑:更新以使用.ready()处理程序中的公共$引用。