jquery:如何在具有相同类名的mulitple容器中应用相同的更改

时间:2013-08-23 09:06:11

标签: javascript jquery dom

我想在.buttons之外移动.details

   <div class="product-actions">product 1
      <div class="buttons buttons_3 group">buttons
         <a class="details" title="Détails" rel="nofollow" >link</a>
      </div>
   </div>

   <div class="product-actions">product 2
      <div class="buttons buttons_3 group">buttons
        <a class="details" title="Détails" rel="nofollow" >link</a>
    </div>
  </div>

这就是诀窍

if ($('.product-actions').length )
    {       

    $('.product-actions').prepend("<div id='new_details_location'></div>");
    $(".details").prependTo("#new_details_location");

    $('.buttons_3').attr('class','buttons buttons_2 group');        
    }

问题是有多个产品,并且所有a.details都被移动到第一个产品div,而不是在每个div的开头都有前缀.product-actions:

http://jsfiddle.net/upKhq/2/ 任何的想法?

4 个答案:

答案 0 :(得分:2)

试试这个FIDDLE

$('.product-actions').each(function () {
    $new = $(this).prepend("<div class='new_details_location'></div>");
    $(".details", $(this)).prependTo($new);

    $('.buttons_3', $(this)).attr('class', 'buttons buttons_2 group');
});

你犯了一些错误: 您的选择器不是上下文相关的,并且您在id中使用的prependTo必须是唯一的,但您有2个具有相同ID的div。

答案 1 :(得分:2)

你的意思是这样做吗?

$('.product-actions').each(function() {
    $elem = $("<div class='new_details_location'></div>");
    $(this).find(".details").prependTo($elem);
    $(this).prepend($elem);
});

$('.buttons_3').attr('class', 'buttons buttons_2 group');

http://jsfiddle.net/samliew/upKhq/4/

答案 2 :(得分:0)

您可以使用每个jquery方法:

$('.product-actions').each(function() {
    var self = $(this);
    var new_location = $("<div id='new_details_location'></div>").prependTo(self);
    self.find(".details").prependTo(new_location);
    self.find('.buttons_3').attr('class','buttons buttons_2 group');   
});

你不应该为两个元素使用相同的id。

答案 3 :(得分:0)

使用.each,并使用$(this)来引用当前的.product-actions元素。此外,你不能有多个相同的ID,只有第一个会被使用

if ($('.product-actions').length ) {       
   $('.product-actions').each(function() {
      var newDetailLocation = $('<div></div>');
      $(this).prepend(newDetailLocation);
      $(".details",$(this)).prependTo(newDetailLocation);
      $('.buttons_3',$(this)).attr('class','buttons buttons_2 group');        
   });
}