我很好奇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()等方法后才会创建?
答案 0 :(得分:1)
无论如何,你的建议似乎没有提供任何好处:
处理从jquery集合的元素中收集的数据数组,用户无论如何都必须迭代这个数组 - 这可以使用jquery的each
方法来完成立即访问带有属性的元素的其他好处:
$("my_spiffy_selector").each( function ( idx, e ) {
$(e).attr("blarf").whatever();
});
如果getter返回类型是多态的或者有不同的getter,那么它会使问题复杂化(至少是jquery代码库)。
可以说最常见的用例至少需要额外.first()
次呼叫。