Javascript 在jQuery中选择嵌套列表中没有子项的列表项父项
我有一个嵌套列表:Javascript 在jQuery中选择嵌套列表中没有子项的列表项父项,javascript,jquery,html,Javascript,Jquery,Html,我有一个嵌套列表: <ul> <li>Item 1 <ul> <li>Item 1A</li> <li>Item 1B</li> <li>Item 1C</li> </ul> </li> <li>Item 2 <ul> <li>Item 2A<
<ul>
<li>Item 1
<ul>
<li>Item 1A</li>
<li>Item 1B</li>
<li>Item 1C</li>
</ul>
</li>
<li>Item 2
<ul>
<li>Item 2A</li>
<li class="active">Item 2B</li>
<li>Item 2C</li>
</ul>
</li>
<li>Item 3
<ul>
<li>Item 3A</li>
<li>Item 3B</li>
<li>Item 3C</li>
</ul>
</li>
</ul>
还有parent().parent()
:
当然,它们都会给整个“Item 2”列表项上色,包括所有子元素2A、2B和2C。您必须将每个父元素包装到一些html元素中,如div或span HTML
<ul>
<li>Item 1
<ul>
<li>Item 1A</li>
<li>Item 1B</li>
<li>Item 1C</li>
</ul>
</li>
<li><span>Item 2</span>
<ul>
<li>Item 2A</li>
<li class="active">Item 2B</li>
<li>Item 2C</li>
</ul>
</li>
<li>Item 3
<ul>
<li>Item 3A</li>
<li>Item 3B</li>
<li>Item 3C</li>
</ul>
</li>
</ul>
为此,您需要将
项目2
文本包装在包含元素中,例如span
,否则所有子元素的颜色也将更改
然后,您可以使用.parent.closest('li')
来获取li
,然后再使用children()
来检索span
。试试这个:
$(“ul”).on(“mouseenter mouseleave”,“li.active”,函数(e){
var$target=$(this.parent().closest('li')。children('span');
$target.add(this.toggleClass('hover',e.type=='mouseenter');
});代码>
.active{
字体大小:粗体;
}
.悬停{
颜色:红色;
}
-
项目1
- 项目1A
- 项目1B
- 项目1C
-
项目2
- 项目2A
第2B项
- 项目2C
项目3
- 项目3A
- 项目3B
- 项目3C
我可能会通过以下方式实现:
- 使用标准的
:为li
本身悬停规则
- 为其父级
li
- 使用CSS中的类重新断言
li
下的从属ul
元素(及其子元素)的颜色
像这样:
$(“li”)
.on(“mouseenter”,function(){
if($(this).hasClass(“活动”)){
$(this).parent().closest(“li”).addClass(“已激活”);
}
})
.on(“mouseleave”,函数(){
if($(this).hasClass(“活动”)){
$(this.parent().closest(“li”).removeClass(“has active”);
}
});代码>
li{
颜色:黑色;
}
李,他是个积极的人{
颜色:红色;
}
活动:悬停{
颜色:红色;
}
.有活跃的ul{
颜色:黑色;
}
- 项目1
- 项目1A
- 项目1B
- 项目1C
- 项目2
- 项目2A
第2B项
- 项目2C
项目3
- 项目3A
- 项目3B
- 项目3C
要使其起作用,您需要将项目2
文本包装在包含元素中,例如span
,否则,将更改所有子元素的颜色too@RoryMcCrossan或者–使用此标记–必须覆盖处于活动状态的父项的任何子项的样式。您可能会通过该方法获得更大的父项背景。这在小提琴示例中显然不起作用…?谢谢。这真是太基本了@罗里姆克罗桑为我工作。您的解决方案也是如此。@Rorymcrossan实际上我复制了错误的fiddle url。更新小提琴link@RoryMcCrossan我不知道,但有时候JSFIDLE行为恶劣,我已经多次面对这个问题
$(this).parent().parent().css("color", "red");
<ul>
<li>Item 1
<ul>
<li>Item 1A</li>
<li>Item 1B</li>
<li>Item 1C</li>
</ul>
</li>
<li><span>Item 2</span>
<ul>
<li>Item 2A</li>
<li class="active">Item 2B</li>
<li>Item 2C</li>
</ul>
</li>
<li>Item 3
<ul>
<li>Item 3A</li>
<li>Item 3B</li>
<li>Item 3C</li>
</ul>
</li>
</ul>
$("li").on("mouseenter", function () {
if ($(this).hasClass("active")) {
$(this).css("color", "red");
$(this).parent().parent().find("span").css("color", "red");
}
});