我有幾個項目div的浮動左邊,以便他們似乎是在列中。用戶可以點擊任何給定項目上的「隱藏」,併爲該元素添加一個「.hide」類,該元素具有display:none css。第n個孩子,除非它有一類「隱藏」
問題:有沒有辦法做.item:not(.hide):nth-child(2n+2)
?因此,當我有一個項目列表,其中一個隱藏在中間時,該規則仍適用並「忽略」.hide
項目。
活生生的例子,http://jsbin.com/ajeqal/edit#javascript,html,live
如果您在右側的列項單擊「隱藏」,列出毛病在這個意義上,左邊欄應該始終有不同的背景顏色比右欄。我可以將隱藏的項目移動到列表的末尾,但這是更多的工作。
HTML:
<style>
.hide { display:none;}
.item{ float: left; width: 150px; padding: 5px; background: #ccc;}
.item:not(.hide):nth-child(2n+1) { background: #999; margin-right:5px }
.item a { display:inline-block; margin-left: 10px; }
body { width: 325px; }
#unhideAll { display: none; clear: left; margin-top: 20px;}
#container { overflow: auto; }
</style>
<body>
<div id="container">
<div class="item">item<a href="#">hide</a></div>
<div class="item">item<a href="#">hide</a></div>
<div class="item hide">item<a href="#">hide</a></div>
<div class="item">item<a href="#">hide</a></div>
</div>
<div id="unhideAll"><a href="#">Unhide All</a></div>
</body>
JS:
$('#unhideAll').click(function(e) {
e.preventDefault();
$(".hide").removeClass("hide");
$(this).hide();
});
$(".item a").click(function(e) {
e.preventDefault();
$(this).parent().addClass("hide");
$("#unhideAll").show();
});
'$( '項目:第n個孩子(2N + 2) ')。不是(' 隱藏' $())' – Ohgodwhy
謝謝,但我希望有一個規則在CSS中爲我做這個 –
不幸的是沒有這樣的規則。 CSS':nth-child()'不會以這種方式進行過濾。 – BoltClock