Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Импортировать ноды из responseXML в document


Автор: y3u 2.10.2006, 15:26
что-то я уже битый час бьюсь, не получаиццо сделать простую штуку. 

Пришел ко мне DOM объект, который мне вернул AJAX, содержит он там примерно такие данные 

Код

<nodeList attribute1="a1" ... >
    <childNode>any html code as dom hierarhy</childNode>
    <childNode>any html code as dom hierarhy</childNode>
    etc...
</nodeList>

допустим мне надо в каждую строчку таблицы вставить HTML код из childNode, при чем вариант, что DOM уже будет содержать готовую таблицу отпадает сразу. Допустим, я уже нахожусь в нужно месте метода, где собираюсь добавить из нужного узла DOM объекта содержимое в строку таблички через innerHtml
Код

    var row = ....
    var childNode = ... это Element <childNode>any html code as dom hierarhy</childNode>

Как нужно правильно поступить? Если тупо делаю appendChild(childNode), то валится No such interface supported. Если делать row.innerHtml = childNode; естественно, рисует "[object]".

Автор: y3u 2.10.2006, 16:18
пока вышел из положения вот таким образом, но может кто подкажет более правильное решение?
Код


function appendChildsContent(parent, node) {
        var childNodes = node.childNodes;
        for (var i = 0; i < childNodes.length; i++) {
            var childNode = childNodes.item(i);
            if (childNode.nodeType == 3) {
                parent.appendChild(document.createTextNode(childNode.nodeValue + " "));
                continue;
            }
            var element = document.createElement(childNode.nodeName);
            appendChildsContent(element, childNode);
            parent.appendChild(element);
        }
}


Автор: pythonwin 2.10.2006, 16:27
y3u
1) пожалуйста, выложи весь код
2) пожалуйста, не используй сленг
3) не понял вопроса 

Автор: skyboy 2.10.2006, 16:34
приведи код response и код, html код области, куда ты вставляешь данные и "вставляющий" код .

Автор: y3u 2.10.2006, 16:43
pythonwin, подправил первый пост, убрал т.н. "сленг"  smile 

люди, не могу я сюда запостить весь код, во-первых он достаточно большой, во вторых - не положено. Не ужели не понятна проблематика? Есть DOM дерево, которое достается из httpRequest.responseXML, в нем узлы либо текстовые либо Element, верхняя часть дерева, скажем на глубину 2-3 уровня - это мои XML теги, все что внутри - это протрансформленное заранее кучей XSL-ников в моем вебприложении содержимое, которое, в итоге, является вполне себе нормальным HTML. Мне теперь надо добавить в строки таблицы к уже существующему контенту это саме HTML содержимое. Поэтому я написал вот такую извратную функцию, которая решает мою проблему. Вопрос состоит в том, можно ли как-то обойтись без этой функции стандартными средствами, т.к. там есть рекурсия, использование которой не желательно.

Автор: pythonwin 2.10.2006, 16:48
Цитата(y3u @  2.10.2006,  23:43 Найти цитируемый пост)
pythonwin, подправил первый пост, убрал т.н. "сленг"  smile 

спасибо! smile

Автор: skyboy 2.10.2006, 17:03
понимаешь, у меня такая схема проблем не вызвала, потому я и спрашиваю весь код smile Кроме того, No such interface supported наводит на мысль, что у тебя как-то не так выбирается row или var childNode. посмотри дебаггером, что в переменных в момент записи?
проверим, правильно ли я понял. тебе приходит в XML-тегах HTML-код, который является строкой таблицы + содержимое строки и тебе надо этот код строки из response вставить в таблицу? 

Автор: Sardar 4.10.2006, 20:06
y3u, ты ошибся только при импорте нод. Нельзя ноды из одного документа appendChild в ноды другого документа. Существует метод импортированная_нода = document.importNode(нода, true);
Вторым параметром указываем что импортируем ноду с дочерними нодами. Полученную ноду/елемент добавляем через appendChild, ошибок быть не должно.

Этот же механизм используеться при переносе нод с одного ифрейма в другой.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)