列に表示されるように、フロートを残したアイテムdivがいくつかあります。ユーザーは任意のアイテムで「非表示」をクリックできます。これにより、その要素に「.hide」クラスが追加されます。このクラスには、display:none css があります。
質問:方法はあります.item:not(.hide):nth-child(2n+2)
か? そのため、アイテムのリストの .hide が途中にある場合でも、ルールは適用され、その.hide
アイテムは「無視」されます。
jsbin のライブ例、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>
J:
$('#unhideAll').click(function(e) {
e.preventDefault();
$(".hide").removeClass("hide");
$(this).hide();
});
$(".item a").click(function(e) {
e.preventDefault();
$(this).parent().addClass("hide");
$("#unhideAll").show();
});