我正在努力更好地理解JQ。 我正在调用JQ对象
$(".FamiliesList li li span[class!='']").prev().find('option:selected')
这会向我返回一个数组,其中包含其span父母的兄弟拥有类名的所有选项。
[option, option]
现在 - 我想返回一个选项值的数组
$(".FamiliesList li li span[class!='']").prev().find('option:selected').attr('value')
这只返回给我第一个子值和一个完整的值数组。
为什么?
我很高兴得到帮助并更好地了解jq :)。
感谢。
答案 0 :(得分:9)
我能提供的最佳答案是“这就是API的工作方式”。我同意你的观点,如“attr”和“val”之类的东西如果返回数组会更加一致(至少在选择器匹配多个元素的情况下)。
如果您愿意,可以使用$.map
获得该效果:
var attrs = $.map($('div.something'), function(element) {
return $(element).attr('whatever');
});
现在“attrs”将是一个数组。你也可以编写自己的函数。
在任何情况下,重要的是要注意有数组,然后有“jQuery对象”。如果你考虑一下,那么在一组jQuery操作的 middle 中使用“attr”或“val”(或类似的东西)永远不会有意义。
答案 1 :(得分:3)
实际上,$(selector)不返回数组。 $(selector)的结果是一个jQuery对象,它被定义为“一组匹配的元素”。这个集合可以包含0个,一个或多个“元素”,但jQuery本身仍然是一个单独的对象。只是一个无法容纳任何东西的盒子。
那么,如果$(...)没有返回数组,那么attr()或val()返回它的原因是什么?这就是为什么属性getter总是(?)返回它们所应用的jQuery对象中 first 元素的属性。
答案 2 :(得分:1)
尝试
$(".FamiliesList li li span[class!='']").prev().find('option:selected').each(function () { return $(this).attr('value'); });`
答案 3 :(得分:1)
您可以使用.map()
执行此操作,如下所示:
var values = $(".FamiliesList li li span[class!='']").prev()
.find('option:selected').map(function(function() {
return $(this).attr('value');
}).get();
这将得到[value1, value2, value3]
,这是所选选项值的数组。
答案 4 :(得分:0)
你不是在寻找像
这样的东西$(".FamiliesList li li span[class!='']").prev().find('option:selected').each(function() {
return this.attr('value');
});
Afaik,attr()方法不适用于多个对象,因此您需要在返回的对象上调用each()。