1

我需要在 div中找到第一个(也是最后一个)元素,该元素设置了 CSS 边距(> 0 px)。(重要:这不一定是第一个或最后一个元素!)

基本上,我需要这样做,以便我可以删除第一个元素的 margin-top 和最后一个元素的 margin-bottom。现在我知道你可能会说“为什么不使用“p:last”CSS 语法?”

因为第一个或最后一个元素也可以是其他元素,它可以是列表(UL、OL)、图像、段落等。我不能简单地做,ul:last, ol:last, p:last as这可能导致匹配多个元素(每种类型一个)。

我只想将此应用于单个元素。所以这就是为什么我认为 jquery 是唯一的解决方案。不过,我很乐意在这方面犯错。

4

3 回答 3

2

因为你只想要第一个/最后一个有 margin的孩子,我想你需要使用 jQuery/JavaScript:

var isfirst = 1, lastelm;
$("#divid").find("*").each(function() {
    var cur = $(this);
    if(parseInt(cur.css("margin-top")) > 0 && isfirst == 1) {
        cur.css("margin-top", 0);
        isfirst = 0;
    }
    if(parseInt(cur.css("margin-bottom")) > 0) {
        lastelm = cur;
    }
});
lastelm.css("margin-bottom", 0);
于 2012-09-08T17:22:42.117 回答
1

我建议在 jquery(http://api.jquery.com/filter/) 中使用过滤器方法。

这是我能想到的样本

<html>
   <body>
      <p>
        <p>A<p>        
        <p>B<p>        
        <p style="margin: 10px;">C<p>    
        <p style="margin: 10px;">C<p>     
        <p>D<p>        
      </p> 
      <script>
         $(document).ready(function(){
            $('p').filter(function(){
                return this.style.margin != '';
            }).last().css('color','red');             

         });

     </script>    
  <body>

​</p>

您可能希望建立在过滤器逻辑的基础上......

于 2012-09-08T17:23:27.137 回答
0

:last实际上不是 jQuery 之外的 CSS 选择器。但是您可以使用的:first-child还有:last-child

#my-element > *:first-child {
    margin-top: 0;
}

#my-element > *:last-child {
    margin-bottom: 0;
}

编辑:太晚了。但是,我肯定会使用>选择器,以免为每个第一个孩子设置样式#my-element(例如 a 中的第li一个ul或 astrong中的 ap等)。

于 2012-09-08T17:13:14.740 回答