2011-04-28 229 views
1

我有一个表,其中每个td都有title,id和lang属性。我想要所有匹配指定标题和ID的元素的所有lang。所以我试过了:jQuery:返回所有匹配的元素不仅一个匹配元素

var lossy = $("[title="+hicode+"][id="+hiwidth+"]").attr("lang"); 
alert(lossy); 

但是这个返回只是第一个匹配的元素。

任何想法返回数组或甚至字符串中的所有匹配的元素仍然可以。谢谢。

回答

3

您可以通过所有匹配的元素的使用jQuery的each()功能循环......

此代码定义了一个数组,通过所有的匹配元素的循环,并增加了郎ATTR到阵列。

var results=new Array(); 

$("[title="+hicode+"][id="+hiwidth+"]").each(function(index){ 
    results[index] = $(this).attr("lang"); 
}); 

alert(results); 

而且,这里是通过循环的div并收集ID ATTR一个例子:http://jsfiddle.net/tSmMj/

希望帮助:)

+0

谢谢。您的解决方案也适用于我。 – Protocole 2011-04-28 06:56:34

3

标准jQuery函数,$(selector),并返回所有匹配的元素。你的问题就在这里:

[id="+hiwidth+"] 

你似乎有相同的id属性的多个元素,并且是不允许的; id属性在每个页面中应该是唯一的,否则您将会得到未定义的行为。在你的情况下,浏览器只返回你正在寻找的第一个包含id的元素。

因此,您需要修复您的HTML,然后修复您的选择器以匹配您更正的HTML。

+1

谢谢。我将避免使用具有相同id属性的多个元素。 – Protocole 2011-04-28 06:56:00

7

试试这个

var lossy = $("[title="+hicode+"][id="+hiwidth+"]").map(function() { return $(this).attr("lang"); }); 
alert(lossy); 

我使用的地图功能转换在阵列或阵列状物体的所有项目,以项目的另一个数组。 (http://api.jquery.com/jQuery.map/

+0

来自jQuery doco:“由于返回值是一个jQuery封装的数组,所以get()返回的对象与基本数组一起工作是非常普遍的。”你可能想在'.map()'调用的结尾添加一个'.get()'。 – vhallac 2011-04-28 06:38:13

+0

谢谢你们两位。正如Dysaster所说,它在添加'.map()'之后起作用。 – Protocole 2011-04-28 06:55:01

+0

为了得到一个真正的数组,你需要对.map()调用的结果做.toArray() – rynop 2014-09-18 17:58:57