在jQuery中给出一个XML元素,如下所示:
$('<foo oy="vey" foo="bar" here="is" another="attribute" />')
我可以使用jQuery或普通的旧JavaScript来获取包含XML元素中所有属性名称的数组吗?我希望如此:
['oy','foo','here','another']
答案 0 :(得分: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。
答案 1 :(得分: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.
}
答案 2 :(得分:0)
<Foo>
元素您是否需要单个元素的属性列表?
...如果是这样 - 你真的需要阵列吗?
简单$('<foo ... />').get(0).attributes
...将为您提供属性的NamedNodeMap(对象)
<Foo>
您是否需要在整个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