2011-12-05 66 views
5

¿Cómo puedo crear un <div> que rodea un <div> existente.Cómo envolver un elemento existente con otro en jQuery?

Mi código es el siguiente:

<div id="test"> 
    <h2>Greetings</h2> 
    <p>Test</p> 
    <div class="inner">Hello</div> 
    <p>Test</p> 
    <div class="inner">Goodbye</div> 
</div> 
<div id="test2"> 
    <h2>Greetings</h2> 
    <p>Test</p> 
    <div class="inner">Hello</div> 
    <p>Test</p> 
    <div class="inner">Goodbye</div> 
</div> 

<script> 
    $("#test").before('<div class="test3">'); 
    $("#test2").after('</div>'); 
</script> 

Pero parece que no puede insertar un <div> sin una etiqueta de cierre. Entonces, ¿cómo lograr eso?

+0

Es posible que desee para envolver el código en $ (function() {// código aquí}); para que solo lo ejecute la página está completamente cargada –

+0

Tengo una lista dinámica con un iterador. Y necesito insertar 3 elementos por div. :( – newbie

+1

Kyoka, no es necesario porque el html viene antes del script. –

Respuesta

9

Utilice la .wrapAll()doc método

$('#test, #test2').wrapAll('<div class="test3">'); 
3

jQuery ajusta la DOM API nativa, que funciona con elementos HTML completos.

No puede insertar la mitad de una etiqueta.

En su lugar, debe compilar un nodo completo creando un $('<div />') separado, anexándole varios elementos y luego agregando el árbol completo al DOM.

+0

hay una solución alternativa o ¿cómo puedo insertar tres elementos dentro de un div de forma dinámica? – newbie

+0

Esto realmente no hace nada para responder la pregunta. – riwalk

+0

@ novato: construye el árbol antes de anexarlo. Ver mi edición. – SLaks

4

Puede usar la llamada a la API .wrap() que ajustará el HTML existente con un nuevo elemento.

+0

esto envolverá cada uno de los elementos seleccionados ... por lo que colocará un contenedor diferente alrededor de cada uno de los elementos ... 'wrapAll' es el que se necesita en este caso ... –

1

bien, utilizar lo siguiente:

<script> 
     var inner=$("#test"); 
     var outer=$('<div class="outer"></div>'); 
     outer.html(inner.html()); 
     inner=outer; 
</script> 
+0

La respuesta de Tak es mejor –

+0

Entonces, ¿no eliminas tu respuesta? –

1

Esto es lo que debe hacer:

<script type="text/javascript"> 
$(function() { 
    $('<div class="test3"></div>') 
     .insertBefore($('#test')) 
     .append($('#test')) 
     .append($("#test2")); 
} 
</script> 
Cuestiones relacionadas