jQuery获取选中元素前一个元素HTML返回undefined问题求助
问题根源及解决办法
核心问题有两个:
- 类名不匹配:你JS里遍历的是
.leftNav,但HTML里的目标元素类是lastNav,这直接导致遍历逻辑根本找不到要处理的元素。 - DOM结构层级问题:每个
lastNav都被包裹在独立的row容器里,所以lastNav元素本身没有同级的lastNav,它的父级row才是同级关系。你之前用.prev()/.prevAll()直接在lastNav上调用,自然找不到目标元素。
修正后的代码:
JavaScript部分:
$('.lastProduct').click(function() { // 直接定位选中的lastNav元素,无需each遍历 const $selected = $('.lastNav.selected'); // 先找父级row的前一个row容器,再获取里面的lastNav const $prevLastNav = $selected.closest('.row').prev('.row').find('.lastNav'); if ($prevLastNav.length) { const html = $prevLastNav.html(); alert(html); } else { alert('已经是第一个元素了'); } })
关键改动说明:
- 用
$('.lastNav.selected')直接定位选中元素,比遍历所有元素更高效。 - 通过
closest('.row')找到当前选中元素的父容器,再用prev('.row')获取前一个同级的容器,最后用find('.lastNav')拿到目标元素,适配了你的DOM层级结构。 - 增加
$prevLastNav.length判断,避免在已经是第一个元素时弹出undefined。
另外注意你原JS代码末尾多了一个多余的}),需要删除,否则会引发语法错误。
内容的提问来源于stack exchange,提问作者bart2puck
相关产品推荐
相关产品推荐

