定位第一级<li> s而不是嵌套的<li> s
我有以下的HTML:
<ul> <li>A <ul> <li>subsection</li> </ul> </li> <li>B <ul> <li>subsection</li> </ul> </li> <li>C <ul> <li>subsection</li> </ul> </li> </ul>
使用jQuery,我如何定位<li>
的第一级?
例如,我需要使用字母A,B和Chover在<li>
上的字体粗体,但是没有将该字体样式应用于嵌套的<li>
s(带有名称小节 )。
这是一个初始的jsfiddle DEMO,如果你想使用它。
谢谢。
编辑 –
解:
儿童select ,这就是答案。
不需要jQuery,这可以使用CSS来完成。
这里是更新的DEMO
编辑 –这是一个更清晰的演示
谢谢,
有一个容器<div>
和一个类,并使用>
select器。 让我们说你的容器div的类是“myclass”:
.myclass ul li { ...this will affect both levels of li. } .myclass > ul > li { ...this will only affect the first level. } .myclass > ul > li > ul > li { ...this will only affect the second level. }
注意:当用作CSSselect器时, >
select器在IE6及以下版本中不起作用。 它在所有其他浏览器中都能正常工作,包括IE7和IE8,当在JQuery中使用时,它可以在jQuery支持的所有浏览器(包括IE6)中运行。
你可以这样做:
$('ul > li:not(:has(ul))');
但是最好给你的顶级<ul>
一个ID,这样你可以用一个有效的CSSselect器来定位它:
$('#topUL > li')
儿童select ,这就是答案。
不需要jQuery,这可以使用CSS来完成。 使用select器来定位第一级li
元素:
ul > li { font-weight: bold; }
然后撤消更深的元素的造型:
ul > li li { font-weight: normal; }
这里是更新的DEMO 。
我会设置一个规则来定位所有的li元素,然后另一个覆盖这个目标嵌套li元素。
li{font-weight:bold;} ul ul li{font-weight:normal;}
嵌套李元素将是正常的重量和顶级将大胆。
我不认为你的问题已经完全解决了(虽然有一些很好的尝试)。 您的示例问题涉及将样式应用于父级,并阻止子级inheritance样式 – 这是一个CSS问题。
你可以通过知道父元素(如一些已经注意到的)来定位列表项目。 然后在hover上添加一个类。
$('div > ul > li').hover(function(){ $(this).addClass('myHover'); }, function(){ $(this).removeClass('myHover'); });
而你的CSS将会有父类的类,而对于孩子来说则是一种否定的风格:
.myHover { font-weight: bold; } .myHover li { font-weight: normal; }