Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jQuery中选择嵌套列表中没有子项的列表项父项_Javascript_Jquery_Html - Fatal编程技术网

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");
        }          
    });