jQuery在每个具有样式显示的第n个子项后附加元素:block

时间:2012-10-23 13:41:49

标签: jquery css-selectors

另一个jQuery的事情,我正在摸不着头脑。 我有一些使用jQuery打开和关闭的浮动div(如下所示)。 我需要在具有显示样式的每个第三个子元素之后追加一些位:无。

<div class="ItemList">
    <div class="Item">A</div>
    <div class="Item" style="display:none;">B</div>
    <div class="Item">C</div>
    <div class="Item">D</div>
    <div class="Item" style="display:none;">E</div>
    <div class="Item">F</div>
    <div class="Item">G</div>
    <div class="Item">H</div>
    <div class="Item">I</div>
    <div class="Item" style="display:none;">J</div>
    <div class="Item">K</div>
    <div class="Item">L</div>
    <div class="Item">M</div>
    <div class="Item">N</div>
</div>

我想出了这个但是不对!

$(".Item[style*='display: block']:nth-child(3n)").after("<div class='Clear'></div>");

有什么想法吗?!

2 个答案:

答案 0 :(得分:2)

您可以使用:visible选择器:

$(".Item:visible:nth-child(3n)").after("<div class='Clear'></div>");

或:

$(".Item:nth-child(3n):visible").after("<div class='Clear'></div>");

请注意选择器的顺序非常重要。

答案 1 :(得分:1)

在您选择.Item元素之前或之后,我不确定您是否需要过滤元素。

选择元素后。

$(".Item:nth-child(3n)").filter(function(){
     return $(this).css("display") != "none";
}).after("<div class='Clear'></div>");

@undefined也有一个非常好的答案。