2011-08-16 19 views
5

¿Cómo puedo agregar un elemento div alrededor de 2 (o más) div? Lo que pienso:Crear envoltorio div alrededor de otros dos divs con jQuery

HTML:

<div class="list-price">20000</div> 
<div class="sell-price">10000</div> 

jQuery:

$('div.list-price').each(function() { 
    $(this).before('<div class="action-price">'); 
    $(this).next().after('</div>'); 
    }); 

esperaba que el código de seguridad hará esto:

<div class="action-price"> 
<div class="list-price">20000</div> 
<div class="sell-price">10000</div> 
</div> 

Pero:

<div class="action-price"></div> 
<div class="list-price">20000</div> 
<div class="sell-price">10000</div> 

¿Alguien puede ayudarme?

Gracias,

Gabor

+0

su antes y después de usos no son válidas ya que estos métodos no escriben texto al contenido del documento, que en lugar escriben _nodes_. entonces, la 1ra ('antes') inserta la etiqueta de cierre automático (bu jQuery) y la segunda ('después') salta debido a una marcación no válida – Guard

Respuesta

1

Usted está pensando en los elementos como código HTML, sino que son objetos. No puede agregar las etiquetas de inicio y finalización por separado, porque no son elementos completos.

Agregar nuevo elemento, y mover los divs existentes en su interior:

$('div.list-price').each(function() { 
    var newDiv = $('<div/>').addClass('action-price'); 
    $(this).before(newDiv); 
    var next = $(this).next(); 
    newDiv.append(this).append(next); 
}); 

Demostración: http://jsfiddle.net/Guffa/eFXbN/1/

+0

Thx Guffa, tiene razón, pero falta una línea dentro de cada una (): $ (this) .parent ('div'). AddClass ('acción-precio'); – riskogab

+0

@riskogab: Ya he agregado eso, y también un enlace a una demostración. :) – Guffa

+2

ver mi enfoque y respuesta, su limpiador. http://jsfiddle.net/blowsie/eFXbN/7/ – Blowsie

0
$first = ... // the 1st element 
$rest = ... // other elements, may be just the second one 
$first.wrap('<div class="wrapper"/>').parent().append($rest) 
0

tuve que Revese su última línea a:

$ reposo. wrap (''). parent(). append ($ first);

1

Un buen enfoque para esto es hacer lo siguiente.

$("div.list-price").each(function(){ 
    $(this).nextUntil("div.list-price").andSelf().wrapAll("<div class='action-price'></div>"); 
}); 

Es simple y legible, probablemente la forma en que los desarrolladores de jQuery intentaron escribirlo.

6

Trate de usar la función wrapAll:

$('.list-price, .sell-price').wrapAll('<div class="action-price" />'); 
Cuestiones relacionadas