Понимание Document.createElement()
Я использую GWT
и его основу DOM
возможностей.
То, что я в основном пытаюсь достичь, это:
- Есть
div
элемент, содержащий некоторый текст - Некоторые из этих текстов будут окружены
span
элементы - Элементы 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
childs, родной брат childs, не добавив его вDOM
, Я хотел бы понять, как дерево элементов для просмотра существует еще доoutermostDiv
добавлен в DOM?
3 ответа
Document.createDivElement()
создает объект, который реализует com.google.gwt.dom.client.Node
, вызвав следующий JavaScript:
return doc.createElement('div');
Такой узел изначально не присоединен к дереву документа, но даже до того, как он есть, вы уже можете выполнять большинство операций над ним (за исключением тех, которые будут нуждаться в его родительском узле, так как он все еще нулевой).
Примечание. Узел создается тем же документом, к которому он будет позже присоединен (это необходимо, поскольку узлы, созданные в другом документе, могут быть несовместимы - поэтому вы не всегда можете присоединить все узлы везде).
Чтобы уточнить этот вопрос, я должен сначала признать, что я чистый фронтендер - я не играл с GWT и пишу сырой Javascript, поэтому этот ответ основан на эзотерическом знании DOM в браузере.
Да! Живая манипуляция с DOM документами обходится дорого. Управлять DOM перед вставкой гораздо быстрее, поскольку такие вещи, как вычисления стиля, вычисления перекомпоновки макета и события мутации DOM, запускаются только один раз, а не с каждой отдельной модификацией.
Он существует в DOM - DOM просто представляет собой абстракцию XML-манипуляции, которая использовалась для его создания в первую очередь - он просто еще не является частью DOM документа и всех дополнительных сложностей, которые это вызывает.
Я думаю, что вы должны использовать StringBuilder для своей реализации. Вы можете выполнять все манипуляции со StringBuilder (вставлять теги, изменять их положение и т. Д.), А когда вы закончите, вы добавляете его содержимое в виджет HTML в виде строки. Это было бы намного быстрее, чем создание элементов, добавление дочерних элементов и т. Д.