2009-11-10 4 views
1

Учитывая элемент XML в JQuery следующим образом:JavaScript/jQuery: Как получить массив всех атрибутов в элементе XML?

$('<foo oy="vey" foo="bar" here="is" another="attribute" />') 

Могу ли я использовать как JQuery или обычный старый JavaScript, чтобы получить массив, содержащий имена всех атрибутов в элементе XML? Я ожидал бы этого:

['oy','foo','here','another'] 
+2

Слово предостережения, jquery на самом деле не поддерживает формирование XML из строкового литерала. Он будет работать в firefox и, возможно, в других браузерах, но не в IE. См. Http://docs.jquery.com/Core/jQuery: «Строка HTML для создания« на лету ». Обратите внимание, что это анализирует HTML, * not * XML." – Funka

+0

О, я также должен упомянуть, есть плагины, которые позволят вам сделать это, если хотите. – Funka

ответ

5

jQuery function самом деле не предназначена для разбора XML, он может разобрать HTML, но это не совсем то же самое.

Что об использовании XML-парсер браузера:

function parseXML(text) { 
    var parser, xmlDoc; 

    if (window.DOMParser) { 
    parser = new DOMParser(); 
    xmlDoc = parser.parseFromString(text,"text/xml"); 
    } else { // IE 
    xmlDoc= new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async = "false"; 
    xmlDoc.loadXML(text); 
    } 
    return xmlDoc; 
} 

// Demo 
var doc = parseXML('<foo oy="vey" foo="bar" here="is" another="attribute" />'); 
var foo = doc.childNodes[0]; 
for (var i = 0; i < foo.attributes.length; i++) { 
    var attr = foo.attributes[i]; 
    alert(attr.name + " = " + attr.value); 
} 

Выполнить код выше here.

2

This plugin поможет вам в этом.

Вы также можете сделать это с помощью простой старый JavaScript с помощью что-то вроде этого:

var elt = document.getElementsByTagName('id'); 
for (i=0;i<elt.attributes.length;i++){ 
    //elt.attributes[i].nodeName is what you want, .nodeValue for its value. 
} 
Смежные вопросы