jQuery API 架构选择:为什么为 attr(), val(), .. 返回单个值而不是数组

jQuery API architecture choices: why return single value instead of arrays for attr(), val(), ...?

本文关键字:单个值 返回 val 数组 API 选择 为什么 jQuery attr      更新时间:2023-09-26

我很好奇一些jQuery API架构选择背后的原因。

从文档

attr():

获取匹配元素集中第一个元素的属性值。

val():

获取匹配元素集中第一个元素的当前值。

即使我有很多对象:

$('div').val()

将仅返回第一个元素的值。

但设置的工作方式不同:

价值(值):

设置匹配元素集中每个元素的值。

attr(属性名称,值):

为匹配元素集设置一个或多个属性。

所以我的问题:

  • 为什么决定像 val() 这样的 getter 操作应该只返回第一个值而不是值数组?(如果用户希望所有映射操作都位于一个数组中,则必须使用映射操作)

  • 为什么不对像 .val(value) 这样的 setter 操作做同样的事情呢?

  • 我可以看到一个用例(带有 $('div').first()),我们希望对 val() 的调用返回值(我们知道匹配的集合中只有一个 dom 元素)而不是长度为 1 的数组。但是为什么不用"单 dom 元素查询对象"的概念来处理它(只有在调用 first() 或 eq()等方法后创建)?

警告:我不参与jquery的开发,所以这些想法可能完全脱离了实际的设计决策。

无论如何,恕我直言,您的建议似乎没有任何优势:

  1. 要处理从 jQuery 集合的元素收集的数据数组,用户无论如何都必须遍历此数组 - 这首先可以使用 jQuery 的 each 方法完成,该方法具有立即访问携带该属性的元素的额外好处:

    $("my_spiffy_selector").each( function ( idx, e ) { $(e).attr("blarf").whatever(); });

  2. Otoh 如果 getters 返回类型是多态的,或者如果有不同的 getter,它会使事情复杂化(至少是 jquery 代码库)。

  3. 可以说,最常见的用例至少需要额外的.first()调用。