Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery:为什么选择器返回一个数组,而属性不返回?_Jquery_Arrays_Jquery Selectors - Fatal编程技术网

jquery:为什么选择器返回一个数组,而属性不返回?

jquery:为什么选择器返回一个数组,而属性不返回?,jquery,arrays,jquery-selectors,Jquery,Arrays,Jquery Selectors,我正在努力更好地理解JQ。 我正在调用一个JQ对象 $(".FamiliesList li li span[class!='']").prev().find('option:selected') 这将返回给我一个包含所有选项的数组,这些选项的跨度父级的兄弟有一个类名 [option, option] 现在-我想返回一个选项值数组 $(".FamiliesList li li span[class!='']").prev().find('option:selected').attr('valu

我正在努力更好地理解JQ。 我正在调用一个JQ对象

$(".FamiliesList li li span[class!='']").prev().find('option:selected')
这将返回给我一个包含所有选项的数组,这些选项的跨度父级的兄弟有一个类名

[option, option]
现在-我想返回一个选项值数组

$(".FamiliesList li li span[class!='']").prev().find('option:selected').attr('value')
这只返回给我第一个子值和一个完整的值数组

为什么?

如果能得到帮助并更好地理解jq,我将不胜感激:)

谢谢。

试试看

$(".FamiliesList li li span[class!='']").prev().find('option:selected').each(function () { return $(this).attr('value'); });`

你不是在找类似的东西吗

$(".FamiliesList li li span[class!='']").prev().find('option:selected').each(function() {
  return this.attr('value');
});

好吧,attr()方法不能处理多个对象,因此您需要对返回的对象调用每个()方法。

我能提供的最佳答案是,“这就是API的工作方式”。我同意您的看法,如果“attr”和“val”返回数组(至少在选择器匹配多个元素的情况下),它们会更加一致

如果需要,可以使用
$.map
获得该效果:

var attrs = $.map($('div.something'), function(element) {
  return $(element).attr('whatever');
});
现在“attrs”将是一个数组。您也可以编写自己的函数

在任何情况下,需要注意的是,有数组,然后是“jQuery对象”。如果你想一想,在一组jQuery操作的中间使用“Atter”或“Vall”(或类似的东西)永远不会有意义。

你可以这样使用:

var values = $(".FamiliesList li li span[class!='']").prev()
               .find('option:selected').map(function(function() {
                 return $(this).attr('value');
               }).get();
这将获得所选选项值的数组。

实际上,$(选择器)不返回数组。$(选择器)的结果是一个jQuery对象,它被定义为“一组匹配的元素”。这个集合可以包含0个、一个或多个“元素”,但jQuery本身仍然是一个对象。只是一个什么也装不下的盒子


那么,如果$(…)不返回数组,attr()或val()返回数组的原因是什么?这就是为什么属性getter总是(?)返回应用它们的jQuery对象中第一个元素的属性。

不同的方法对单个或多个元素起作用确实是不一致的。这不是API中唯一的不一致之处。没有什么比这更需要理解的了。。。如果jQuery的界面中有任何可以理解的理念的话,那就是“让我们尽可能多地将不同的特性加入
$()
,一致性被诅咒”。应该是
$(this)
而不是
this
快捷方式
.val()
应该在这里提及,谢谢你,谢谢这篇文章中的每个人回答我。在你的最后一段中,没有让你了解太多。为什么没有意义?这将返回一个对象$(“.FamiliesList li li span[class!=”)”。它是一个属性选择器。为什么没关系?毕竟我使用jq来匹配DOM元素,这不是因为她被创建了吗?“jQuery对象”是一个支持所有jQuery函数的专用数组,对象的“数组”部分的元素是一组匹配的DOM节点。考虑到jQuery的整体架构,使用数组值类似于“attr”结果的jQuery对象是没有意义的。我仍然认为这种不一致是奇怪的。如果我可以通过属性返回选择器的对象,为什么我不能通过方法匹配?like attr()将返回第一个子级,但[attr=*]不会返回?