我正在使用GWT
及其内置DOM
功能。
我基本上想要实现的目标是:
div
元素,其中包含一些文字span
元素span
元素这就是它的样子:
在应用程序启动时,在最终用户动态创建spans
期间,我必须进行一些Element
和Nodes
操作(创建,插入,修改,删除) 。为了实现这一点,我必须通过DOM树才能找到特定的元素。
我正在寻找方法来减少在启动应用程序时花费的无用时间,在此我构建我的div
元素(包含所有文本和span
元素)。
举个例子:
DivElement outermostDiv = Document.get().createDivElement();
processText(outermostDiv, text); // text could be a Java String element
turnTheseIntoSpans(listOfSpans, outermostDiv); // listOfSpans could be a list of text that must be surrounded by span elements.
让我们想象一下,turnTheseIntoSpans
使用以下方法对outermostDiv
元素进行了大量修改:appendChild()
,removeFromParent()
,...
我的问题是:
在将 outermostDiv 及其子项插入DOM之前修改它是一个好习惯吗?
我可以访问outermostDiv
个孩子,孩子的兄弟,而无需将其添加到DOM
。我想了解在将outermostDiv
添加到DOM之前,如何存在可浏览的元素树?
答案 0 :(得分:1)
Document.createDivElement()
通过调用以下JavaScript创建一个实现com.google.gwt.dom.client.Node
的对象:
return doc.createElement('div');
这样的节点最初没有附加到文档树,但即使在它之前,你已经可以在它上面执行大多数操作了(除了那些需要它的父节点的操作,因为它仍然是空的)。 p>
注意:节点是由稍后将附加到的同一文档创建的(这是必要的,因为由不同文档创建的节点可能不兼容 - 因此您无法始终将所有节点附加到所有节点。)
答案 1 :(得分:1)
要使这个问题合格,我必须首先承认我是一个纯粹的前锋 - 我没有玩过GWT并且我编写了原始的Javascript,所以这个答案是基于对浏览器内DOM的深奥了解。
是的!实时文档DOM操作成本很高。在插入之前操作DOM要快得多,因为样式计算,布局重排计算和DOM突变事件之类的操作只运行一次而不是每次修改。
它存在于DOM中 - DOM只是用于创建它的XML操作抽象 - 它还不是文档DOM的一部分,以及所带来的所有其他复杂性。
答案 2 :(得分:0)
我认为您应该使用StringBuilder进行实现。您可以使用StringBuilder进行所有操作(插入标记,更改其位置等),完成后,将其内容作为字符串添加到HTML小部件中。它比创建元素,追加孩子等快得多。