Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.03.2009, 12:17
belbek
 
Сообщений: n/a

не понимаю cloneNode
Получаю xml через responseXML и хочу вставить и отобразить полученный кусок в имеющемся дереве.
Для этого делаю(как учат все учебники)
var resp = xhr.responseXML
var old = resp.getElementsByTagName('ul')[0];
var noviy = old.cloneNode(true);

и вставляю в заданный li(вложенный спискок)
document.getElementById('some id').appendChild(noviy)

в результате вставлятся мешанина li не в виде списка а именно li следуют один за другим без переноса строки, и в firebug вствленный кусок структурно отображается правильно но блекло. Как корректно вставлять?
И можно ли вообще просто получить кусок хмл и вставить иге в нужное место без создания элементов, создания всех их атрибутов и последующей, и только потом вставки? Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 26.03.2009, 12:27
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

С сервера возвращаете обычный html, потом у нужного элемента
document.getElementById('someId').innerHTML = xhr.responseText;
Ответить с цитированием
  #3 (permalink)  
Старый 26.03.2009, 12:28
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Не уверен, но по моему попытка вставить кусок XML в HTML обречена на неудачу.
попробуйте обернуть HTML внутри XML-а в блок CDATA, а потов вставлять с помощью innerHTML
не уверен, что поможет, но попробовать стоит
Ответить с цитированием
  #4 (permalink)  
Старый 14.03.2013, 11:25
Аспирант
Отправить личное сообщение для Caminante Посмотреть профиль Найти все сообщения от Caminante
 
Регистрация: 23.03.2012
Сообщений: 40

У меня аналогичная проблема. Аяксом получаю с сервера XML, в котором есть как бы HTML-разметка, которую нужно перенести на страницу. Например:

<answer>
Ответ на вопрос смотрите <a href="">тут<a>
</answer>


Делаю cloneNode(true), все вставляется, но ссылки не работают, хотя в исходном коде они есть.

Возможно, есть какое-то решение проблемы?
Ответить с цитированием
  #5 (permalink)  
Старый 14.03.2013, 22:25
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Caminante
Возможно, есть какое-то решение проблемы?
Нет конечно. Gvozd, же ясно об этом сказал:
Сообщение от Gvozd
обернуть HTML внутри XML-а в блок CDATA, а потов вставлять с помощью innerHTML
Ответить с цитированием
  #6 (permalink)  
Старый 15.03.2013, 08:25
Аспирант
Отправить личное сообщение для Caminante Посмотреть профиль Найти все сообщения от Caminante
 
Регистрация: 23.03.2012
Сообщений: 40

Такое решение мне не подходит, поскольку xml строится с помощью xslt, а xsl:copy-of невозможно обернуть в cdata. Поэтому и спрашиваю, нет ли какого-то альтернативного варианта.
Ответить с цитированием
  #7 (permalink)  
Старый 15.03.2013, 09:18
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Gvozd
Не уверен, но по моему попытка вставить кусок XML в HTML обречена на неудачу.
Так и есть. Оно и понятно.

<!DOCTYPE html>
<body>
    <div></div>
    <script>
        var text = '<root><a href="//google.com">Google</a></root>';
        if (typeof DOMParser !== 'undefined') {
            parser = new DOMParser();
            xmlDoc = parser.parseFromString(text, "application/xml");
        } else {
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = false;
            xmlDoc.loadXML(text); 
        }

        var xmlNode = xmlDoc.documentElement.firstChild,
            htmlNode = document.body.children[0];

        try {
            htmlNode.appendChild(xmlNode.cloneNode(true));
        } catch (e) {
            alert(e.message);
        }
    </script>
</body>


Сообщение от Caminante
Поэтому и спрашиваю, нет ли какого-то альтернативного варианта.
Сериализовать xml-узлы в строку и вставлять через innerHTML;
Или проходить в цикле по ним и создавать и вставлять соответствующие им html-элементы.

Последний раз редактировалось danik.js, 17.03.2013 в 11:23.
Ответить с цитированием
  #8 (permalink)  
Старый 15.03.2013, 23:20
Аспирант
Отправить личное сообщение для Caminante Посмотреть профиль Найти все сообщения от Caminante
 
Регистрация: 23.03.2012
Сообщений: 40

danik.js, спасибо за ответ. Решила-таки попробовать переписать все с использованием JSON вместо XML.
Ответить с цитированием
  #9 (permalink)  
Старый 16.03.2013, 09:15
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

в ие xml и html - это два непересекающихся мира, так что по любому требуется промежуточная сериализация.

я беру xml накладываю xslt который преобразует xml в html с дополнительными преобразованиями и вставляю в документ
__________________
.ня
Ответить с цитированием
  #10 (permalink)  
Старый 16.03.2013, 09:29
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

Сообщение от Caminante Посмотреть сообщение
danik.js, спасибо за ответ. Решила-таки попробовать переписать все с использованием JSON вместо XML.
а вот это зря на самом деле. json имеет больше минусов чем плюсов.

воспользуйся например такой либой для xml: https://github.com/nin-jin/jin/blob/...v%3Dweb.jam.js

при этом у тебя будут удобные селекты по xpath запросам, возможность преобразования в html без говнокода на js ну и в целом более практичный и расширяемый формат данных.
__________________
.ня
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск