如何使用 jQuery 选择上一个 LI
how do i select the previous li using jquery?
我有一个无序列表,但其中有不同类别的标题。
<ul>
<h2>header1</h2>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<h2>header2</h2>
<li>...</li>
</ul>
我正在尝试遍历它们并按日期对它们进行排序,但标题将其抛弃。
我正在使用:
var list = $('#articleList');
list.children("li").each(function () {
...
}
我在循环中使用它来选择它前面的那个:
var prev = $(this).prev("li");
出于某种原因,如果您在标题之后的列表项而不是它们之前的列表项上,prev 会选择标题。所以我的排序最终在标题中是正确的,但我需要对整个事情进行排序,而不仅仅是按部分排序。
这将与HTML解析有关。根据规范,列表可能只包含<li>
元素,而不包含其他元素。因此,您的浏览器将构建一个不同的 DOM,例如通过将标题包装到列表项中(HTML5 将指定如何处理无效的 HTML(。使用 DOM 检查器查看实际的 DOM 树(上下文菜单 -> 检查元素(。
尝试以下操作:
var prev = $(this).prevUntil('li').first();
我怀疑你不正确的HTML搞砸了jQuery。prev()
方法。 ul
元素不应具有h2
元素作为子元素。
相反,您应该让h2
元素成为li
元素的子元素,从而使您的 HTML 如下所示:
<ul id="articleList">
<li class="header"><h2>header1</h2></li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li class="header"><h2>header2</h2></li>
<li>...</li>
</ul>
请注意,每个包含h2
元素的li
元素都有一个"标头"类。然后,您可以像这样遍历每个非标头li
元素:
var list = $('#articleList');
list.children("li:not(.header)").each(function () {
...
}
并像这样获取以前的非标头li
元素:
var prev = $(this).prev("li:not(.header)");
这适用于您的 html:
var prevLI = $('ul li:last').prevAll('li:first');
$('body').append('<h2>Selected: '+ prevLI.text() + '</h2>' );
试试这个小提琴:http://jsfiddle.net/guumaster/4Ax6v/1/
相关文章:
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 如何将值传递到上一个html页面
- Javascript获取上一个元素的内容
- 禁用旋转木马中的下一个按钮和上一个按钮
- 引用vue.js中v-for中的上一个值
- DOM导航-上一个同级未定义
- 构建JS测试,警报窗口重复上一个Q,而不是问下一个Q
- 如何在用户返回和上一个按钮时刷新下拉列表
- 删除“;上一个“;以及“;下一个“;基于当前幻灯片
- 简单的垂直上一个和下一个按钮代码点击上下移动jQuery
- HTML5历史记录-返回上一个完整页面按钮
- 仅在具有相同类的一个 li 上预览文本
- 如何使用 jQuery 选择上一个 LI
- 当我单击下一个/上一个按钮时,如何将活动类更改为 LI 元素
- 有人能理解为什么我的jquery函数上下滑动在我的第一个li标签上不能正常工作吗
- 如何通过单击'include('menu.html')'上的菜单中的一个Li来将html
- 滚动到每12个li元素与下一个/上一个链接的问题
- 如何设置:悬停在一个li(a)上时,悬停在另一个li(B)上
- 获取一行jQuery上的最后一个li
- 单击一个li,在单击的li内的span标记上添加显示块,当单击另一个li时,对其执行相同的操作,并使显示与前一个无关