jQuery closest同class场景问题:ul的alt2应为aaa3却显示aaa0?
问题原因分析
核心问题1:closest('.item')的行为理解偏差
closest()方法是从当前元素本身开始,向上查找最近的匹配选择器的元素。你的每个<li>本身就带有item类,所以当遍历到<li>时,$(this).closest('.item')匹配的是<li>自身,而非父级的<ul>。只有遍历到<ul>时,才会修改<ul>的alt2属性。
核心问题2:遍历顺序导致最终结果停留在初始值
jQuery的$('.item')会按DOM结构的顺序选择元素:先选中<ul.item>(索引e=0),再依次选中三个<li.item>(索引e=1、2、3)。
- 遍历
<ul>时,将其alt2设为aaa0; - 遍历每个
<li>时,修改的是<li>自身的alt2,完全不影响<ul>的属性。
所以最终<ul>的alt2停留在第一次设置的aaa0,和你预期的aaa3不符。
修正方案
如果要让<ul>的alt2等于最后一个.item元素的索引拼接值,可在遍历结束后单独处理:
$('.item').each(function(e){ $(this).attr("alt", e); }); // 单独选中ul.item,设置其alt2为aaa拼接最后一个.item的alt值 $('ul.item').attr('alt2', 'aaa' + $('.item:last').attr('alt'));
或者,如果你只想针对<ul>设置,也可以直接选择ul.item来操作,避免遍历所有.item元素。
内容的提问来源于stack exchange,提问作者Hakan
相关产品推荐
相关产品推荐

