【问题标题】:How to keep odd/even elements left or right upon jQuery remove?如何在jQuery删除时保持奇数/偶数元素左或右?
【发布时间】:2015-10-04 14:46:10
【问题描述】:

我有这个代码:

CSS:

.wrapper{width:400px}
.wrapper div{width:200px}

.odd {float:left}
.even {float:right}

HTML:

<div class="wrapper">
    <div>Odd</div>
    <div>Even</div>
    <div>Odd</div>
    <div>Even</div>
    <div>Odd</div>
    <div>Even</div>
</div>

jQuery:

$('.wrapper').each(function() {
    var $children = $(this).children(),
    $item;
    $children.each(function(i) {
       $item = $(this).addClass(i % 2 === 0 ? 'odd' : 'even')
    });
});

如您所愿。

我的问题是,当一个被 jQuery .remove() 删除时,如何保留 .odd 元素 left.even 元素 right

这个我试过了,但是明显不行:

$('.wrapper div').click(function(){
  $(this).fadeOut(function(){
    $(this).siblings().removeClass('odd');
    $(this).siblings().removeClass('even');

        $('.wrapper').each(function() {
            var $children = $(this).children(),
            $item;
            $children.each(function(i) {
                $item = $(this)
                .addClass(i % 2 === 0 ? 'odd' : 'even')
            });
        });

    $(this).remove();
  });
});

任何建议都非常感谢!

【问题讨论】:

  • 将它们添加到单独的容器&lt;div&gt;s.
  • 是 cmets,是动态添加的。不要认为可能有一个函数可以让每个浮动容器显示各自的第 n 个子元素?

标签: javascript jquery html css css-selectors


【解决方案1】:

尝试使用evenodd 选择器。 更新:如果你使用position属性,当其他元素被移除时,元素不会浮在上面。

Here is working jsFiddle.

jQuery:

var boxHeight = $(".wrapper div").height();
$(".wrapper div:even").addClass("even");
$(".wrapper div:odd").addClass("odd");
//this initualise once after page load, so values won't change/update on click

$(".wrapper div").each(function(i){
    if ( i === 2 || i === 3 ) { $(this).css('top', boxHeight +'px'); }
    if ( i === 4 || i === 5 ) { $(this).css('top', 2*boxHeight +'px'); }
});

$(".wrapper div").click(function(){ $(this).remove(); });

css:

.wrapper{position:relative;left:0;top:0;}
    .wrapper div{position:absolute;top:0;}
        .wrapper .even{ left:0; }
        .wrapper .odd{ right:0; }

【讨论】:

  • 感谢您的建议,但我需要让每个第 n 个孩子在被移除时向左或向右浮动。小提琴:link 唉,我开始认为这只有在浮动容器中才有可能(我不能使用):(
  • 非常感谢您的帮助,但如果要删除前两个偶数中的任何一个,那么奇数将浮出水面
  • @user1871949 比你需要使用位置属性,答案更新。还有另一种防止浮动问题的方法:您需要复制包装器并在包装器中分离偶数和奇数 div。
【解决方案2】:

你可以避免使用 JavaScript 并使用 CSS nth-child

div.wrapper:nth-child(odd) {
    color: red;
    float:right;
}
div.wrapper:nth-child(even) {
    color:blue;
    float:left;
}

【讨论】:

  • 这也是一个好办法,但是注意IE8及更低版本不支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多