Nth-child css属性计算html元素,display属性设置为none。怎么改呢?

时间:2013-02-02 16:38:19

标签: javascript jquery html5 css3 css-selectors

我使用无序列表的简单图库。

    <h1>Projects</h1>
    <hr>

    <!-- Projects gallery as unordered list -->

    <ul class="gallery">

      <li class="item residential">
        <img src="Projects/01-HighTorEast-EarlShilton/01-thumbnail.jpg" width="212" height="119" alt="High Tor East, Earl Shilton">
        <h2><a class="info" href="Projects/01-HighTorEast-EarlShilton/info.php">High Tor East, Earl Shilton</a></h2>
        <h3><a class="cat" href="residential">Residential</a></h3>
      </li>

      <li class="item modernisation">
        <img src="Projects/02-Hollycroft-Hinckley/02-thumbnail.jpg" width="212" height="119" alt="Hollycroft, Hinckley">
        <h2><a class="info" href="Projects/02-Hollycroft-Hinckley/info.php">Hollycroft, Hinckley</a></h2>
        <h3><a class="cat" href="modernisation">Modernisation & Domestic Extensions</a></h3>
      </li>

      <li class="item residential">
        <img src="Projects/03-SpaLane-Hinckley/03-thumbnail.jpg" width="212" height="119" alt="Spa Lane, Hinckley">
        <h2><a class="info" href="Projects/03-SpaLane-Hinckley/info.php">Spa Lane, Hinckley</a></h2>
        <h3><a class="cat" href="residential">Residential</a></h3>
      </li>

      <li class="item residential">
        <img src="Projects/04-Farnhambridge-Rothley/04-thumbnail.jpg" width="212" height="119" alt="Farnhambridge Farm, Rothley">
        <h2><a class="info" href="Projects/04-Farnhambridge-Rothley/info.php">Farnhambridge Farm, Rothley</a></h2>
        <h3><a class="cat" href="residential">Residential</a></h3>
      </li>

      <li class="item modernisation">
        <img src="Projects/05-NetherfieldClose-BroughtanAstley/05-thumbnail.jpg" width="212" height="119" alt="Netherfield Close, Broughtan Astley">
        <h2><a class="info" href="Projects/05-NetherfieldClose-BroughtanAstley/info.php">Netherfield Close, Broughtan Astley</a></h2>
        <h3><a class="cat" href="modernisation">Modernisation & Domestic Extensions</a></h3>
      </li>

      <li class="item modernisation">
        <img src="Projects/06-Bridlepath-Elmesthorpe/06-thumbnail.jpg" width="212" height="119" alt="Bridlepath, Elmesthorpe">
        <h2><a class="info" href="Projects/06-Bridlepath-Elmesthorpe/info.php">Bridlepath, Elmesthorpe</a></h2>
        <h3><a class="cat" href="modernisation">Modernisation & Domestic Extensions</a></h3>
      </li>

      <li class="item residential">
        <img src="Projects/07-Bridlepath-Elmesthorpe/07-thumbnail.jpg" width="212" height="119" alt="Bridlepath, Elmesthorpe">
        <h2><a class="info" href="Projects/07-Bridlepath-Elmesthorpe/info.php">Bridlepath, Elmesthorpe</a></h2>
        <h3><a class="cat" href="residential">Residential</a></h3>
      </li>

      <li class="item feasibility">
        <img src="Projects/08-GrangeCroft-Ullesthorpe/08-thumbnail.jpg" width="212" height="119" alt="Grange Croft, Ullesthorpe">
        <h2><a class="info" href="Projects/08-GrangeCroft-Ullesthorpe/info.php">Grange Croft, Ullesthorpe</a></h2>
        <h3><a class="cat" href="feasibility">Feasibility layouts</a></h3>
      </li>

      <li class="item master">
        <img src="Projects/09-RailwayInn-Sileby/09-thumbnail.jpg" width="212" height="119" alt="The Railway Inn, Sileby">
        <h2><a class="info" href="Projects/09-RailwayInn-Sileby/info.php">The Railway Inn, Sileby</a></h2>
        <h3><a class="cat" href="master">Master planning</a></h3>
      </li>


    </ul>

  </section>

比我的css中我为.item类的每四个子项设置右边距值为零。我这样做是为了在我的页面上连续保留四个项目而不删除边距我只能容纳三个。

ul.gallery { clear:both; list-style:none; margin:0; padding:0; width:940px; }
.gallery a:hover { text-decoration:underline; }
li.item { display:inline; margin:30px 20px 30px 0px; padding:0px; height:178px; width:220px; float:left; background:#ededed url('../Images/featuredline.png') repeat-x 0% 100%; overflow:hidden; }
li.item:nth-child(4n+4) { margin:30px 0px 30px 0px; }

接下来,我编写了一些小jQuery代码来按类别对项目进行排序。因此,如果有人点击“住宅”链接,它将隐藏具有不同类别的元素。

    $('.cat').bind('click', function(e) {
    var cat = $(this).attr('href');
    $('.item').each(function () {
    var itemClass = $(this).attr('class');
    if (itemClass != 'item '+cat) {
        $(this).css({"display":"none"});
    };


    });
    e.preventDefault();

我的问题是:当我使用上面的jQuery脚本对我的图库项目进行排序时,似乎.item:nth-​​child属性仍在计算将display属性设置为none的元素。我不知道怎么咬它。我需要css .item:nth-​​child属性来计算jQuery插件触发后的可见元素。

网站位于http://www.damianwojtczak.com/avd2/projects.php

4 个答案:

答案 0 :(得分:1)

删除您的第n个孩子CSS样式,每次更改布局时,请调用:

$("li.item:visible").each(function(i) {
    if((i+1)%4==0) $(this).css("margin","30px 0");
    else $(this).css("margin","30px 20px 30px 0");
})

刚刚在您的网站上用萤火虫进行了测试并进行了一次治疗。

答案 1 :(得分:1)

一种解决方案是将nth-child css选择器更改为类,并使用jQuery切换类。

li.item.marginClass { margin:30px 0px 30px 0px; }

JS:

$(function(){
    var $items=$('li.item');
    function toggleMargin(}{
        $items.removeClass('marginClass').filter(':visible').addClass(function(index){
              return index % 4 ===0 && index !=0 ? 'marginClass' : '';
        });
    }
    /* call for page loaded items*/
    toggleMargin(};

    $('.cat').bind('click', function (e) {
        /* filtering code here*/

        /* adjust class*/
         toggleMargin(};

    })



});

答案 2 :(得分:1)

当您隐藏节点时,设置一些“isHidden”属性标记$(this).attr('isHidden'),当您显示节点时,删除此标记.removeAttr('isHidden'),然后您可以更新您的选择器

li.item:not([isHidden]):nth-child(4n+4) { margin:30px 0px 30px 0px; }

如果您不想使用额外属性,可以将其添加为类名,如Tomalak's answer中所示。

答案 3 :(得分:0)

<强> CSS

而不是

li.item:nth-child(4n+4) { margin:30px 0px 30px 0px; }

使用

li.item.split { margin:30px 0px 30px 0px; }

<强>的jQuery

reorderColumns  =   function(ev) {
    $('li.item').removeClass('split');
    $('li.item:visible:nth-child(4n+4)').addClass('split');
    ev.preventDefault();
};

$('.cat').on('click',reorderColumns);