Javascript 在JQ指定之前,如何选择以前的元素?
我继承了带有菜单的模板,其中类别和子类别在同一范围内。以下是一个例子:Javascript 在JQ指定之前,如何选择以前的元素?,javascript,jquery,Javascript,Jquery,我继承了带有菜单的模板,其中类别和子类别在同一范围内。以下是一个例子: <ul class="menu"> <li class="cat" data-item-type="category"></li> <li data-item-type="sub-category"></li> <li data-item-type="sub-category"></li> <li dat
<ul class="menu">
<li class="cat" data-item-type="category"></li>
<li data-item-type="sub-category"></li>
<li data-item-type="sub-category"></li>
<li data-item-type="sub-category"></li>
<li data-item-type="sub-category"></li>
<li class="cat" data-item-type="category"></li>
<li data-item-type="sub-category"></li>
<li data-item-type="sub-category"></li>
<li data-item-type="sub-category"></li>
<li data-item-type="sub-category"></li>
<li class="cat" data-item-type="category"></li>
<li class="cat" data-item-type="category"></li>
<li data-item-type="sub-category"></li>
<li data-item-type="sub-category"></li>
</ul>
我不能改变它的结构,但可以添加额外的属性
因此,我的问题是,当单击其中一个子类别时,是否可以选择所有类别子类别。通常,我需要选择所有
li
,直到第一次class=“cat”
或data item type=“category”
出现,包括它-category及其所有子项 根据OP的更新更新答案:
$('li[data-item-type="sub-category"]').click(function() {
$(this)
.add( $(this).nextUntil('.cat') )
.add( $(this).prevUntil('.cat') )
.prev('.cat').addBack() //in jQuery < 1.8, replace addBack by andSelf
//do something
});
因此.prevAll('.cat:first')
匹配前一个.cat
,nextUntil('.cat')
获取其所有子类别,并addBack
(或在旧版本中和self
)将.cat
元素添加回匹配的元素集中
在最新的jQuery版本中,.add()
和.addBack()
方法按照文档顺序对匹配的元素进行排序,因此这两种方法都将.cat
作为集合中的第一个元素,然后是文档顺序中的子类别
参考
$('li[data-item-type="sub-category"]').click(function() {
$(this)
.add( $(this).nextUntil('.cat') )
.add( $(this).prevUntil('.cat') )
.prev('.cat').addBack() //in jQuery < 1.8, replace addBack by andSelf
//do something
});
因此.prevAll('.cat:first')
匹配前一个.cat
,nextUntil('.cat')
获取其所有子类别,并addBack
(或在旧版本中和self
)将.cat
元素添加回匹配的元素集中
在最新的jQuery版本中,.add()
和.addBack()
方法按照文档顺序对匹配的元素进行排序,因此这两种方法都将.cat
作为集合中的第一个元素,然后是文档顺序中的子类别
参考
这将根据您对类别和子类的请求(更新)解决您的问题(不是bug)
单击子节点或猫节点并选择其周围的其他子节点,同时选择其类别,这将根据您对类别和子节点的请求(更新)解决您的问题(而不是buggy)
要单击子节点或猫节点,并选择其周围的其他子节点及其类别,请查看下一个匹配的同级操作符:查看下一个匹配的同级操作符:我需要在单击子节点时获取它,而不是在猫节点上。几乎在那里,但我也需要那个类别。@Kirix你是说在组中第一个子类别之前的类别,对吗?@Kirix好的,根据你的问题要求,我相信现在这个更新是100%。在你复习的时候,我会尝试重构一下这段代码。@Fabriciomatté注意:这对没有子类别的类别不起作用。我需要在单击子类别时得到它,而不是在cat上。几乎在那里,但我也需要那里的类别。@Kirix你是说在组中第一个子类别之前的类别,对吗?@Kirix好的,有了这个更新,我相信现在它是100%根据您的问题的要求。在你复习时,我会尝试重构一下这段代码。@Fabriciomatté注意:这对没有子类别+1的类别不起作用。如果OP需要该功能,单击
.cat
,它也会起作用。这是你的代码演示,谢谢你为我的代码做了一个演示,虽然Kirix的更好,如果它是有组织的,你的意思是更好的缩进/换行?如果您愿意,可以随意编辑/设置样式并添加到答案中=]
+1单击.cat
也可以工作,以防OP需要该功能。这是你的代码演示,谢谢你为我的代码做了一个演示,虽然Kirix的更好,如果它是有组织的,你的意思是更好的缩进/换行?如果您愿意,可以随意编辑/设置样式并添加到答案中<代码>=]
$('li.cat').on('click', function() {
$(this).nextUntil('.cat');
/* then write you logic here */
});
$('li').click(function() {
var x = $(this).add($(this).nextUntil('.cat')).add($(this).not('.cat').prevUntil('.cat')).andSelf().add($(this).not('.cat').prevAll('.cat:first'));
});