jQuery:使用:eq和:不在语句中

时间:2011-11-17 20:38:57

标签: jquery jquery-selectors

HTML

<ul>
   <li>1</li>
   <li>2</li>
   <li>3    
     <ul id="sub">
      <li>3.1</li>
      <li>3.2</li>
   </ul>
 </li>
 <li>4</li>
<ul>

我正在尝试选择前几个&lt; li&gt;基于条件的标签并排除任何&lt; li&gt;具有&lt; ul&gt;在里面用id'sub'。

我能够获得第一部分,但无法排除ul内的带有“sub”的li标签。

这是我正在使用的jQuery代码。

$(columns[i] + ' li:eq(:not(#sub li)'+ j +')').css('padding-top', paddingTop);

2 个答案:

答案 0 :(得分:2)

假设以下HTML:

<ul id="main">
   <li>1</li>
   <li>2</li>
   <li>3    
     <ul id="sub">
       <li>3.1</li>
       <li>3.2</li>
     </ul>
   </li>
   <li>4</li>
<ul>

您可以像这样使用jQuery:

$('#main > li:not(:has(#sub))');

...这里是小提琴:http://jsfiddle.net/yqrd5/


或者,如果您只想在前3个中选择:

$('#main > li:lt(3):not(:has(#sub))');

...或动态:

var j = 3;
$('#main > li:lt(' + j + '):not(:has(#sub))');

...这里是小提琴:http://jsfiddle.net/yqrd5/1/


或者您可能希望前3个没有ul

$('#main > li:not(:has(#sub)):lt(3)');

...这里是小提琴:http://jsfiddle.net/yqrd5/2/

答案 1 :(得分:1)

使用:has选择器:

$('li:not(:has(ul#sub))').css('padding-top', paddingTop);

http://jsfiddle.net/mblase75/62x3S/

选择包含<li>的{​​{1}},这正是您所要求的。但是,如果您还要排除子列表:

<ul id="sub">