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

时间:2014-04-02 23:33:08

标签: javascript jquery api architecture

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

来自文档

ATTR():

  

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

VAL():

  

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

即使我有很多物品:

$('div').val()

只会返回第一个元素的值

但SETTING的工作方式不同:

VAL(值):

  

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

attr(attributeName,value):

  

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

所以我的问题:

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

  • 为什么不对 setter operations 执行相同操作,例如.val(value)?

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

1 个答案:

答案 0 :(得分:1)

警告:我不参与jquery开发,因此这些想法​​可能完全取决于实际的设计决策。

无论如何,你的建议似乎没有提供任何好处:

  1. 处理从jquery集合的元素中收集的数据数组,用户无论如何都必须迭代这个数组 - 这可以使用jquery的each方法来完成立即访问带有属性的元素的其他好处:

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

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

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