JavaScript/jQuery: How do I get an array of all attributes in an XML element?

后端 未结 3 926
甜味超标
甜味超标 2021-01-27 00:59

Given an XML element in jQuery like so:

$(\'\')

Can I use either jQuery o

相关标签:
3条回答
  • 2021-01-27 01:18

    This plugin will help you do that.

    You can also do it using plain old javascript using something like that :

     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 讨论(0)
  • 2021-01-27 01:18

    A) Single <Foo> element

    Do you need list of attributes of a single element?
    ... if so - do you really need an array?
    Simple $('<foo ... />').get(0).attributes
    ...will give you NamedNodeMap (object) of attributes


    B) All elements <Foo> in the whole (XML) document

    @Soufiane Hassou 's answer is showing approach but is missing the inner loop...

    Do you need to fetch all possible attribute names of an element (e.g. Product element) inside a whole XML document?

    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
    
    0 讨论(0)
  • 2021-01-27 01:39

    The jQuery function isn't really meant to parse XML, it can parse HTML, but it's not really the same.

    What about using the browser's XML parser:

    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); 
    }
    

    Run the above code here.

    0 讨论(0)
提交回复
热议问题