Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как получить список attributes ноды XML (https://javascript.ru/forum/events/45454-kak-poluchit-spisok-attributes-nody-xml.html)

andypop 01.03.2014 13:46

Как получить список attributes ноды XML
 
for (var v in x.attributes) {
            
                if (!isNaN(v)) {s += _fTag(_c.tgt, " "+x.attributes[v].name)+_tf+"=""+_fTag(_c.att, x.attributes[v].value)+_tf+""";
                }
            }

Такой код работает только в хроме и ff

danik.js 01.03.2014 15:26

name/value - это DOM Level 4 свойства. Используй nodeName/nodeValue - они из DOM3

И вобще ты неправильно итерируешься по атрибутам. Там помимо индексов и ключей атрибутов перечисляется куча мусора ввиде имен методов.
Итерируйся как все адекватные люди:

for (var i = 0; i < x.attributes.length; i++) {}

andypop 01.03.2014 15:53

Да спасибо. Но перед этим еще надо if (x.attributes){ поставить
Кстати
<?xml version="1.0" encoding="UTF-8"?>
как получить?

danik.js 01.03.2014 16:15

Цитата:

Сообщение от andypop
Но перед этим еще надо if (x.attributes){ поставить

Нафига?
Цитата:

Сообщение от andypop
как получить?

Нафига?

andypop 02.03.2014 00:23

если x.attributes undefined, то x.attributes.length выдаст ошибку в цикле

danik.js 02.03.2014 02:21

Цитата:

Сообщение от andypop
если x.attributes undefined

С чего бы им быть undefined?
alert(document.createElement('x').attributes)

alert(document.createElement('x').attributes.length)

andypop 02.03.2014 08:53

Я над этим сам думаю не один день:)

danik.js 02.03.2014 08:56

Цитата:

Сообщение от andypop
Я над этим сам думаю не один день

:blink:
А я вот за 10 секунд написал тест и проверил. Учись )

andypop 02.03.2014 09:50

Ок, всё дело в паразитной ноде "<#document>"
если написать x.firstChild, то парсер ее пропускает и x.attributes отрабатывает корректно.

andypop 02.03.2014 10:27

http://stackoverflow.com/questions/3...ith-javascript
А здесь показано как решить проблему кроссбраузерности.


Часовой пояс GMT +3, время: 15:28.