JavaScript/jQuery: Как получить массив всех атрибутов в элементе XML?

Учитывая XML-элемент в jQuery, например:

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

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

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

Ответ 1

Функция jQuery не предназначена для синтаксического анализа 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); 
}

Запустите приведенный выше код здесь.

Ответ 2

Этот плагин поможет вам в этом.

Вы также можете сделать это, используя простой старый 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.
 }