Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 16.03.2013, 12:28
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от tenshi
в ие xml и html - это два непересекающихся мира
Так в любом браузере. Я тестовый скрипт привел выше.
Сообщение от tenshi
а вот это зря на самом деле. json имеет больше минусов чем плюсов.
В каком плане? И по сравнению с чем? По сравнению с XML и CDATA секциями, содержащими html?
Ответить с цитированием
  #12 (permalink)  
Старый 17.03.2013, 00:50
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

> Так в любом браузере. Я тестовый скрипт привел выше.

ты забыл применить importNode когда добавлял узлы из одного документа в другой. в современных браузерах нет особой разницы между дом моделями XML и html. а вот в ие - это 2 различные хоть и похожие модели.

> В каком плане? И по сравнению с чем? По сравнению с XML и CDATA секциями, содержащими html?

зачем html пихать в сидату? html вполне органично вписывается в xml, в отличие от json и ему подобных
__________________
.ня
Ответить с цитированием
  #13 (permalink)  
Старый 17.03.2013, 08:39
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Про importNode не знал. Тем не менее, при импорте узлы не "конвертируются". И узел <a> не становится инстансом HTMLAnchorElement.
<!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(document.importNode(xmlNode, true));
        } catch (e) {
            alert(e.message);
        }
    </script>
</body>

Сообщение от tenshi
зачем html пихать в сидату?
Если так ведь все html-теги в xml-документе не являются html-узлами. Так зачем тогда парсить в dom эти узлы? Чтобы тут же их сериализовать чтобы затем распарсить как html ? Это же тупо. CDATA позволит избежать лишние шаги. Или я чего-то не знаю?

Последний раз редактировалось danik.js, 17.03.2013 в 11:22.
Ответить с цитированием
  #14 (permalink)  
Старый 17.03.2013, 09:49
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

> И узел <a> не становится инстансом HTMLAnchorElement.
конечно, в xml неймспейс по умолчанию - пустая строка, а в хтмл - "http://www.w3.org/1999/xhtml")

ну вот пример фильтрации вывода с использованием xslt http://habrahabr.ru/post/171557/
также можно нагенеренному пользователем контенту навешать своих классов и прочих прелестей
__________________
.ня
Ответить с цитированием
  #15 (permalink)  
Старый 17.03.2013, 11:15
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Да чтож такое. Опять затупил ) И с firstChild тупанул ведь.
<!DOCTYPE html>
<body>
    <div></div>
    <script>
        var text = '<root><a xmlns="http://www.w3.org/1999/xhtml" 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(document.importNode(xmlNode, true));
        } catch (e) {
            alert(e.message);
        }
    </script>
</body>

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

Ссылки заработали после добавления пространства имен
Но остался еще один неприятный глюк - ссылки "выделяются" переходом на новую строку, в исходном коде вот такое:

<p>"Если вы хотите приобрети продукт,
приходите в любой"
 <a xmlns="http://www.w3.org/1999/xhtml" href="...">офис
</a> 
"или"
 <a xmlns="http://www.w3.org/1999/xhtml" href="">салоны наших
дилеров</a>
"."<br></br><br></br>
Не забудьте, что для совершения покупки ...</p>


Т.е. ссылка переходит на новую строчку и после нее тоже переход на новую строку.

var answer = curTheme.getElementsByTagName('question')[j].childNodes[1].cloneNode(true);

var ans = document.createElement('p');
// 	ans.innerHTML = answer;
ans.appendChild(answer);

el('questions_insert').appendChild(ans);


При этом в ИЕ работает только вариант с innerHTML... Честно говоря, после двух дней всевозможных попыток и изучения тонны информации голова идет кругом, так что любое вправление мозгов всячески приветствуется

Последний раз редактировалось Caminante, 17.03.2013 в 19:07.
Ответить с цитированием
  #17 (permalink)  
Старый 17.03.2013, 19:39
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Caminante
в исходном коде вот такое
В каком исходном коде? Его же нет ) Ноды напрямую импортируются в DOM.
Сообщение от Caminante
При этом в ИЕ работает только вариант с innerHTML
В ИЕ работает. Не работает только в восьмерке (ну и некро-7 и 6 тоже конечно). Потому что в IE8 нету importNode. Но костыль найти не проблема.
Ответить с цитированием
  #18 (permalink)  
Старый 17.03.2013, 21:59
Аспирант
Отправить личное сообщение для Caminante Посмотреть профиль Найти все сообщения от Caminante
 
Регистрация: 23.03.2012
Сообщений: 40

Я имею в виду в коде того, что было добавлено динамически.

Да, для восьмерки я нашла костыль. Но проблема не в ИЕ, а в непонятных переносах строки
Ответить с цитированием
  #19 (permalink)  
Старый 17.03.2013, 22:09
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А кавычки вас значит не смущают? Нет никаких переносов. И кавычек нет:-)
Ответить с цитированием
  #20 (permalink)  
Старый 17.03.2013, 22:12
Аспирант
Отправить личное сообщение для Caminante Посмотреть профиль Найти все сообщения от Caminante
 
Регистрация: 23.03.2012
Сообщений: 40

Переносы есть уже визуальные, на странице.
Ответить с цитированием
Ответ



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

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