2012-09-19 2 views
1

J'ai une structure HTML par ex.jQuery: Comment copier un conteneur uniquement?

<div id="mydiv" class="some" onclick="alert('Hello!')" style="background:red" > 
    <div>aa</div> 
    <div style="background:green" >bb</div> 
</div> 

http://jsfiddle.net/Pj5sn/

et je veux

<div id="mydiv" class="some" onclick="alert('Hello!')" style="background:red" > 
</div> 

en conséquence. .clone() crée une copie profonde, mais j'ai besoin d'une copie superficielle.

Édition Toutes les réponses incluaient jusqu'à présent une copie complète et un contenu clair. J'ai l'intention de l'utiliser pour plusieurs dizaines de contenants contenant chacun plusieurs dizaines d'objets. Je pense qu'il est nécessaire d'avoir quelque chose de plus efficace.

Répondre

0

La solution que j'ai utilisée est un peu différente. D'abord, je crée une certaine structure et déplacer le contenu div intérieur:

var $storage=$('<div/>').append($("#mydiv").children()); 

Maintenant, je peux cloner le reste « shell » et déplacer à l'intérieur d'une partie appropriée du contenu:

$("#mydiv").clone(true,true).attr("id","d1") 
    .appendTo($(document.body)) 
     .append($(":first-child",$storage)); 

http://jsfiddle.net/KyTZ6/

Peut-être que cela semble trop compliqué mais ma tâche consistait à diviser une table HTML (~ 30 x 30) en six parties et j'avais des problèmes de performance avec le clonage et l'effacement proposés.

3

Le plus simple serait $(this).clone().html(''). D'abord, utilisez .clone(), puis utilisez .empty() sur le résultat.

8

+2

+1, c'est mieux que ma première pensée. – Jon

+0

@Jon: Merci. Mais vous étiez plus rapide de 5 secondes entières :) – Tadeck

+0

L'exemple est simple mais il peut y avoir beaucoup de code à l'intérieur et cela ne semble pas très efficace. – IvanH

Questions connexes