Хорошо, вопрос изменился.Мля.Вот новый ответ:
Вы можете немного повысить эффективность выполнения, построив ветвь, прежде чем добавлять ее в дерево DOM (браузер не будет пытаться что-либо восстановить во время сборки).И немного в плане эффективности обслуживания за счет уменьшения количества лишних переменных:
var d = document;
var docBody = d.getElementsByTagName("body")[0];
// Copyier dom
var sasDom = d.createElement('span');
sasDom.setAttribute("id", "sasText");
// Hider dom
var sasDomHider = d.createElement('span');
sasDomHider.setAttribute("id", "sasHider");
sasDomHider.appendChild(sasDom); // append child to parent
docBody.appendChild(sasDomHider); // ...and parent to DOM body element
Оригинальный ответ:
Вы пытаетесь вставить один и тот же элемент дважды, вто же место ...
var newNode = d.createElement('span');
... Это единственное место, где вы создаете элемент в этом коде.Так что создан только один элемент.И вы вставляете его после последнего дочернего элемента в теле:
docBody.appendChild(newNode);
Пока все хорошо.Но затем вы модифицируете атрибут и пытаетесь вставить тот же самый узел снова, после последнего потомка sasDomHider ... который сам по себе!Естественно, вы не можете сделать узел своим собственным потомком.
Действительно, вы просто хотите создать новый элемент и работать с ним:
newNode = d.createElement('span');
newNode.setAttribute("id", "sasText");
sasDomHider.appendChild(newNode);
// the next line is unnecessary; we already have an element reference in newNode
// sasDom = d.getElementById("sasText");
// ... so just use that:
sasDom = newNode;