用jQuery遍历元素属性

我知道个人属性可以检索attr()方法,但我试图遍历一个元素的所有属性。 对于上下文,我在一些XML上使用jQuery …

 <items> <item id="id123" name="Fizz" value="Buzz" type="xyz"> <subitem name="foo"> <subitem name="bar"> </item> <item id="id456" name="Bizz" value="Bazz" type="abc"> <subitem name="meh"> <subitem name="hem"> </item> </items> 

我已经能够遍历的项目…

 $(xml).find('item').each(function() { // Do something to each item here... }); 

但我希望能够得到每个“项目”的属性数组,所以我可以迭代这些…

例如

 $(xml).find('item').each(function() { var attributes = $(this).attributes(); // returns an array of attributes? for (attribute in attributes) { // Do something with each attribute... } }); 

我在这里做了一些search,在jQuery文档中,以及其他地方通过谷歌,但没有运气。 如果没有别的,我可能会遇到麻烦,排除有关的jQuery对象的attr()方法的结果。 提前致谢。

最好的方法是直接使用其attributes属性来使用节点对象。 我的解决scheme与其他人build议这种方法相比唯一的区别是,我会再次使用.each而不是传统的js循环:

 $(xml).find('item').each(function() { $.each(this.attributes, function(i, attrib){ var name = attrib.name; var value = attrib.value; // do your magic :-) }); }); 

看来你必须使用普通的旧香草javascript:

 for (var i = 0; i < elem.attributes.length; i++) { var attrib = elem.attributes[i]; if (attrib.specified == true) { console.log(attrib.name + " = " + attrib.value); } } 

如何迭代HTML元素中的所有属性?

你可以使用get()函数从jQuery包装中获取DOM元素,然后迭代DOM属性?

 var node = $(myStuff).get(0); if (node.attributes.length) { for (var length = attrs.length, i = 0; i < length; i++) { if (attrs[i].specified) { } } } 

对于一些更强大的DOM属性处理, 请检查这篇博文 。

怎么样?

 $(xml).find('item').each(function() { var attributes = $(this)[0].attributes; for (attribute in attributes) { // Do something with each attribute... } }); 

虽然您可以使用标准的DOM元素属性,但它将包含IE6中的每个属性(即使那些未明确设置的属性)。 或者,您可以限制您设置的属性数量:

 var use_attributes = ['id','name','value','type']; $(xml).find('item').each(function() { var $item = $(this); $.each( use_attributes, function(){ if($item.attr( this )){ // Act on the attribute here. // `this` = attribute name // $item.attr( this ) = attribute value } }) }); 

我在这里发布,因为我认为这可能会帮助其他人到达这个post看我的parsing一个XML文件。

我正在寻找一种遍历xml文件的方法,它的结构非常类似于theracoonbear的文件系统,并将结果存储在一个数组中,并在这篇文章中发现。

我看着prodigitalson的代码,但我根本无法得到这个语法工作 – 用firefox抱怨,在行中:

  $.each(this.attributes, function(i, attrib){ 

this.attributes

不是一个定义的函数。 我很确定这个错误完全是我的 。 但是我花了好几个小时试图做到这一点,并失败了

对我来说有效的是(我的标签名称是会话而不是项目): –

 $(xml_Data).find("session").each(function() { console.log("found session"); $(this).children().each(function(){ console.log("found child " + this.tagName); console.log("attributes" + $(this).text()); }); }); 

我很欣赏这可能不完全回答原来的问题。 不过,我希望这可以节省其他访问者这个职位一段时间。

问候

 function findByAll(toLookFor, lookInText) { return $('*').filter(function() { return Array.prototype.some.call(this.attributes, function(attr) { return attr.value.indexOf(toLookFor) >= 0; }) || (lookInText && $(this).text().indexOf(toLookFor) >= 0); }); }