JavaScript / jQuery: как получить массив всех атрибутов в элементе XML? - PullRequest
1 голос
/ 10 ноября 2009

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 10 ноября 2009

Функция 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 голосов
/ 10 ноября 2009

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

Вы также можете сделать это, используя обычный старый 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.
 }
0 голосов
/ 28 марта 2018

A) Одиночный <Foo> элемент

Вам нужен список атрибутов одного элемента?
... если это так - вам действительно нужен массив ?
Простой $('<foo ... />').get(0).attributes
... будет давать вам NamedNodeMap (объект) атрибутов


B) Все элементы <Foo> во всем (XML) документе

@ Ответ Суфианы Хассу показывает подход, но отсутствует внутренний цикл ...

Вам нужно извлечь все возможные имена атрибутов элемента (например, элемента Product) внутри всего XML-документа ?

var yourElements = document.getElementsByTagName('Foo'); //get all <Foo> elements
var listOfAttributeNames = []; //prepare empty array for attribute names
var attributeNameBuffer; //buffer for current attribute name in loop

//Loop all elements
for(var i = 0; i < yourElements.length ; ++i){ 

   //Loop all attributes of a current element
   for( k = 0 ; k < yourElements[i].attributes.length ; ++k ){ 
       //Temporary store current attribute name
       attributeNameBuffer = yourElements[i].attributes[k].name;

       //First, 
       //test if the attribute name does not already exist in our array of names
       if( listOfAttributeNames.indexOf(attributeNameBuffer) == -1 )
         listOfAttributeNames.push( attributeNameBuffer ); //if not, add it
   }

} 
console.log(listOfAttributeNames); //display array of attributes in console
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...