2012-10-25 51 views
2

在下面的代码中,我试图将最后一条if语句从第一个div.wigDivparent减去margin-top。除了将所有的div.wigDiv家长的负边距应用于所有东西之外,所有东西都在起作用。有任何想法吗?jQuery仅将样式应用于第一个元素

$('.wigCont').each(function() { 

    //some other code here 

    if ($('div.wigDiv', this).hasClass('noMargin')) { 
     if (wigCount == 1) { 
     var width = $('div.wigDiv', this).width(); 
     $('div.wigDiv', this).css({'margin-left':'-18px', 'width': width+36}); 

     if ($('div.wigDiv', this).parent().first()) { 
      $('div.wigDiv', this).parent().css('margin-top','-20px'); 
     } 
     } 
    } 
} 
+0

一个元素只能有一个父,这是许多答案,疏于考虑(除亚历山德罗的),这样做'。首先() ''on'.parent()'什么都不做。我想你可能是指当前'.wigCont'(''this'在'each'内部)中包含的第一个'div.wigDiv'的父节点,或者可能是第一个''div.wigDiv'的父节点。 wigCont“(也就是'each'的第一次迭代),这并不完全清楚,如果能够简化它,发布HTML将有助于消除混淆, –

回答

2

试试这个代码:

$('.wigCont').each(function() { 

    //some other code here 

    if ($('div.wigDiv', this).hasClass('noMargin')) { 
     if (wigCount == 1) { 
     var width = $('div.wigDiv', this).width(); 
     $('div.wigDiv', this).css({'margin-left':'-18px', 'width': width+36}); 

     if ($('div.wigDiv', this).parent().is(':first-child')) { 
      $('div.wigDiv', this).parent().css('margin-top','-20px'); 
     } 
     } 
    } 
} 
+0

工作正常!!感谢您的帮助,Alessandro。 – Chris

+0

欢迎您! –

1

你只需要使用.first如您在if条件有。此外,如果条件只适用于找到匹配元素,则不需要。

$('div.wigDiv', this).parent().first().css('margin-top','-20px'); 

全码:

$('.wigCont').each(function() { 

    if ($('div.wigDiv', this).hasClass('noMargin')) { 
     if (wigCount == 1) { 
     var width = $('div.wigDiv', this).width(); 
     $('div.wigDiv', this).css({'margin-left':'-18px', 'width': width+36}); 

     //below is the modified code 
     $('div.wigDiv', this).parent().first().css('margin-top','-20px'); 
     } 
    } 
} 
0

你做

$('div.wigDiv', this).parent().css('margin-top','-20px'); 

需要的答案之前做parent().first().css :)

0

快速记:你最后的if语句会永远是真的,因为$('div.wigDiv', this).parent().first()重新变成一个物体。

要进行过滤,仅第一个选择的元素,使用.first()

$('div.wigDiv', this).parent().first().css('margin-top','-20px'); 
相关问题