【问题标题】:JavaScript/jQuery: How do I get an array of all attributes in an XML element?JavaScript/jQuery:如何获取 XML 元素中所有属性的数组?
【发布时间】:2009-11-10 03:42:35
【问题描述】:

在 jQuery 中给定一个 XML 元素,如下所示:

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

我可以使用 jQuery 或普通的旧 JavaScript 来获取包含 XML 元素中所有属性名称的数组吗?我希望这样:

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

【问题讨论】:

  • 请注意,jquery 并不真正支持从字符串文字形成 XML。它可以在 Firefox 和其他浏览器中运行,但不能在 IE 中运行。请参阅docs.jquery.com/Core/jQuery:“动态创建的 HTML 字符串。请注意,这会解析 HTML,not XML。”
  • 哦,我还要提一下,如果你愿意的话,有一些插件可以让你这样做。

标签: javascript jquery xml


【解决方案1】:

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.
     }
    

    【讨论】:

    • 我害怕 elt 是一个 HTMLCollection - 没有 attributes 属性的元素集合 - 你必须为集合中的每个元素执行内循环(我将解决方案发布为 aswer)
    【解决方案3】:

    A) 单个&lt;Foo&gt; 元素

    您需要单个元素的属性列表吗?
    ...如果是这样 - 你真的需要一个数组吗?
    简单$('&lt;foo ... /&gt;').get(0).attributes
    ...将为您提供 NamedNodeMap(对象)的属性


    B) 整个 (XML) 文档中的所有元素 &lt;Foo&gt;

    @Soufiane Hassou 的答案显示了方法,但缺少内部循环...

    您是否需要在整个 XML 文档中获取元素(例如 Product 元素)的所有可能属性名称?

    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
    

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 2020-09-29
      相关资源
      最近更新 更多