Supprimer tous les éléments DOM enfants dans div

J'ai les codes dojo suivants pour créer un élément graphique de surface sous un div:

....
<script type=text/javascript>
....
function drawRec(){
var node = dojo.byId("surface");
//   remove all the children graphics
var surface = dojox.gfx.createSurface(node, 600, 600);

surface.createLine({
  x1 : 0,
  y1 : 0,
  x2 : 600,
  y2 : 600
  }).setStroke("black");
}
....
</script>
....
<body>
<div id="surface"></div>
....

DrawRec() dessinera un rectangle graphique première fois. Si j'appelle à nouveau cette fonction dans une ancre href comme ceci:

<a href="javascript:drawRec();">...</a>

Il va dessiner un autre graphique à nouveau. Ce que je dois nettoyer tous les graphiques sous la div, puis créer à nouveau. Comment puis-je ajouter des codes dojo pour le faire?

117
demandé sur David.Chu.ca 2009-03-25 23:42:02

7 réponses

while (node.hasChildNodes()) {
    node.removeChild(node.lastChild);
}
268
répondu Maurice Perry 2009-03-25 21:01:33
node.innerHTML = "";

Non standard, mais rapide et bien pris en charge.

41
répondu Chetan Sastry 2009-03-25 23:58:51

Tout d'abord, vous devez créer une surface une fois et la garder à portée de main. Exemple:

var surface = dojox.gfx.createSurface(domNode, widthInPx, heightInPx);

domNode est généralement un <div> sans fioritures, qui est utilisé comme espace réservé pour une surface.

Vous pouvez tout effacer sur la surface en une seule fois (tous les objets de forme existants seront invalidés, ne les utilisez pas après cela):

surface.clear();

Toutes les fonctions et méthodes liées à la surface peuvent être trouvées dans la documentation officielle sur dojox.gfx.Surface . Exemples d'utilisation peuvent être trouvés dans dojox/gfx/tests/.

25
répondu Eugene Lazutkin 2013-08-11 08:24:03

Dans Dojo 1.7 ou plus récent, utilisez domConstruct.empty(String|DomNode):

require(["dojo/dom-construct"], function(domConstruct){
  // Empty node's children byId:
  domConstruct.empty("someId");
});

Dans l'ancien Dojo, utilisez dojo.empty(String|DomNode) (Il n'y a pas de problème.]}

dojo.empty( id or DOM node );

Chacune de ces méthodes empty supprime en toute sécurité tous les enfants du nœud.

19
répondu Brian C 2017-03-11 06:49:16
while(node.firstChild) {
    node.removeChild(node.firstChild);
}
17
répondu James 2009-03-25 23:35:51

À partir de L'API dojo documentation :

dojo.html._emptyNode(node);
3
répondu Chase Seibert 2009-03-25 21:07:10

Si vous cherchez un moyen moderne > 1.7 Dojo de détruire tous les enfants de node, c'est le moyen:

// Destroys all domNode's children nodes
// domNode can be a node or its id:
domConstruct.empty(domNode);

Vider en toute sécurité le contenu D'un élément DOM. empty() supprime tous les enfants mais conserve le nœud là.

Consultez la documentation "dom-construct" pour plus de détails.

// Destroys domNode and all it's children
domConstruct.destroy(domNode);

Détruit un élément DOM. destroy() supprime tous les enfants et le nœud lui-même.

3
répondu Rui Marques 2014-02-18 09:44:19