删除div中的所有子DOM元素

我有以下的dojo代码来创build一个div下的表面graphics元素:

.... <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()将首次绘制一个矩形graphics。 如果我在这样的锚点href中再次调用这个函数:

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

它会再次绘制另一个graphics。 我需要清除div下的所有graphics,然后重新创build。 我怎样才能添加一些dojo代码来做到这一点?

 while (node.hasChildNodes()) { node.removeChild(node.lastChild); } 
 node.innerHTML = ""; 

非标准,但快速和良好的支持。

首先你需要创build一个表面,并保持在方便的地方。 例:

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

domNode通常是一个简单的<div> ,它被用作表面的占位符。

您可以一次性清除表面上的所有内容(所有现有的形状对象将会失效,之后不要使用它们):

 surface.clear(); 

所有表面相关的函数和方法可以在dojox.gfx.Surface官方文档中find。 使用示例可以在dojox/gfx/tests/

在Dojo 1.7或更新版本中,使用domConstruct.empty(String|DomNode)

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

在较早的Dojo中,使用dojo.empty(String|DomNode) (在Dojo 1.8中已弃用):

 dojo.empty( id or DOM node ); 

每个这些empty方法都安全地删除节点的所有子节点。

 while(node.firstChild) { node.removeChild(node.firstChild); } 

从dojo API 文档 :

 dojo.html._emptyNode(node); 

如果你正在寻找一种现代的> 1.7 Dojo的方式来销毁所有节点的孩子,这是方式:

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

安全地清空DOM元素的内容。 empty()删除所有的子节点,但是保留节点。

查看“dom-construct”文档了解更多细节。

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

销毁一个DOM元素。 destroy()删除所有的孩子和节点本身。