[Opera, JS xmlDom] Проблема с cloneNode

Plok2008

У меня не работает cloneNode в опере если я пытаюсь склонировать объект XMLDocument. Клонирование отдельных элементов из XML(HTML)Document работает нормально.
Для демонстрации можно открыть http://kvanty.net.ru/xml-js.html
В IE оно не заработает, т.к. там сразу используется объект (DOMParser) который работает в FF и Opera.
По нажатии на кнопку должно быть получиться следующее:

Original:
root node type = 9
<div class='d'><span>text</span><br/></div>

Copy:
root node type = 9
<div class='d'><span>text</span><br/></div>

Если же я открываю эту страницу в Opera-10.20 (Linux то получаю только первую часть, а вызов cloneNode завершает выполнение js причем никаких ошибок не возникает.

hwh2010

а у меня выдаёт (в error console):
JavaScript - http://kvanty.net.ru/xml-js.html
Event thread: click
Error:
name: Error
message: NOT_SUPPORTED_ERR
stacktrace: Line 10 of inlinescript in http://kvanty.net.ru/xml-js.html
var xmlCopy = xmlDoc.cloneNode(true);
Line 1 of function script
P;
...

Opera 10.01 Build 4682 i686

hwh2010

Opera-10.20
ээ, это ж бета ваще?

Plok2008

message: NOT_SUPPORTED_ERR
Т.е. действительно опера не может сделать копию всего XMLDocument (при том, что копию отдельных нодов делать может)?
P.S. Это не бета (в gentoo она уже стабильная).

hwh2010

Т.е. действительно опера не может сделать копию всего XMLDocument (при том, что копию отдельных нодов делать может)?
не знаю, я не смотрел суть проблемы. просто указал, что сообщение об ошибке имеется
(в gentoo она уже стабильная).
а мужики-то и не знали
а 11-я в генту есть?

Plok2008

а 11-я в генту есть?
Сорри. Ошибся
Version 10.10 Build 4742 i686, 2.6.31-gentoo-r6
эта самая что ни есть стабильная.

pitrik2

причем никаких ошибок не возникает
как ты это проверяешь?
try catch в коде стоит?

pitrik2

У меня не работает cloneNode в опере если я пытаюсь склонировать объект XMLDocument
помойму очень странно что это работает вообще хоть где-то
какой в этом смысл?
во многих xml парсерах (в java, c++) что я встречал Root был реализован не как обычный Node, не пробовал но подозреваю что отклонировать его тож вряд ли получилось бы

Plok2008

У меня глобально XML-ка представляет собой след. вид:

<menu>
<element/>
<element>
<menu>
<element/>
</menu>
</element>
</menu>

Собственно в браузере реализован редактор menu. А клонировать всё целиком мне нужно для того, чтобы реализовать функцию "отменить все изменения".
Соответственно, я и написал, чтобы код полностью клонировал весь XMLDocument, но при этом он не заработал в опере (в IE и FF работал).
Сейчас я минимально изменил код, чтобы клонировался только firstChild, который и содержит все необходимые вещи.
А задавая вопрос здесь — хотел выяснить это у меня опера "глючит" или это для неё нормальное поведение, ибо гугление вопроса разумных результатов не принесло.

pitrik2

А задавая вопрос здесь — хотел выяснить это у меня опера "глючит" или это для неё нормальное поведение, ибо гугление вопроса разумных результатов не принесло.
не думаю что она глючит
если чо, то стандарту это не противоречит:

cloning Document, DocumentType, Entity, and Notation nodes is implementation dependent
кстати, ты уверен что тебе cloneNode нужен? стандарт вроде рекомендует почаще юзать importNode
ну и опять же - importNode применим токо к обычным нодам:
Document nodes cannot be imported.

Dasar

А клонировать всё целиком мне нужно для того, чтобы реализовать функцию "отменить все изменения".
почему именно клонировать? а не сериализовать?
сериализация должна памяти меньше жрать

Plok2008

Спасибо всем за ответы.
2: вопрос про пожирание памяти — не стоит, ибо размер XML-ки всего пара десятков строк, но за идею сериализации — спасибо. Не задумывался над этим, а может и правду это более правильный вариант.
2: про importNode я как-то даже и не слышал. Нужно будет заботать.
Оставить комментарий
Имя или ник:
Комментарий: