【发布时间】:2013-05-26 01:54:41
【问题描述】:
忽略:http://jsfiddle.net/gulcoza/9cVFT/1/
更新的 FIDDLE: http://jsfiddle.net/gulcoza/9cVFT/4/
整个代码在上面的小提琴中,但我也会在这里解释:
HTML
<ul>
<li id="e1">1</li>
<li id="e2" class="hidden">2</li>
<li id="e3">3</li>
<li id="e4" class="hidden">4</li>
<li id="e5">5</li>
<li id="e6">6</li>
<li id="e7">7</li>
<li id="e8">8</li>
<li id="e9">9</li>
<li id="e10">10</li>
</ul>
jQuery
console.log(
$('ul li:visible:nth-child(4n)')
);
我的预期结果: li#e6, li#e10 - 为什么?因为我只想要可见元素中的 4n 个元素。
但是
实际结果:只有在所有可见的情况下,我才会从所有元素中获取 4n 元素。
console.log(
$('ul li:visible').filter(function(index) {
if ((index + 1) % 4 ==0) return true;
})
);
我对任何比以下更好的解决方案感兴趣:
console.log(
$('ul li:visible').filter(function(index) {
if ((index + 1) % 4 ==0) return true;
})
);
更新的小提琴:
http://jsfiddle.net/gulcoza/9cVFT/4/
为什么 4 号不起作用。在调用过滤器的那一刻,结果应该已经被过滤了,恕我直言。 :|
// 4 - could be a nice solution
console.log(
$('ul li:visible').filter(':nth-child(4n)')
);
为什么这不起作用?在$('ul li:visible') 时刻,只有可见的应该可用。
【问题讨论】:
-
:nth-child是相对于父元素,而不是选择。您使用filter是合适的解决方案,尽管您可能希望将该函数放在代码中的其他位置,以便在您要多次调用它时可以重用它。 -
我不能用逗号或其他任何东西对它们进行分组......在网上找不到任何有用的东西
-
您的解决方案有什么问题?我认为这是最好的解决方案。就像@zzzzBov 说的那样,你应该把函数放在某个地方可以重用。
-
@BillyMathews - 我就是无法平静下来。最重要的是为什么不是这样。 4 不工作?检查更新的小提琴
-
@alex.dominte no.4 不起作用,因为
:nth-child仍然指的是元素相对于其父元素的索引。请记住 -:nth-child是 CSS,而不是 jQuery。
标签: javascript jquery html jquery-selectors