1

我见过的库有 DOM 包装器,在某些情况下只包含处理列表的第一个元素,例如:

return this[0].innerHTML

并在其他一些中使用整个列表,例如:

for( var i=0, l=this.length; ++i<l; ) this[i].className = cls;
return this

为什么这种方法被接受?

我认为挑出第一个元素违背了在列表的其余部分应用相同事物的方法的目的。有可疑的功能不是很糟糕吗?我知道它适合很多人..但感觉不一致,我对为什么它被如此广泛地接受很感兴趣。

以编辑为例:

jQuery.html()

如果选择器表达式匹配多个元素,则只有第一个匹配项才会返回其 HTML 内容。

为什么不是全部?

bonzo 中的hide()方法,来自 Dustin Diaz

//...
hide: function () {
  return this.each(function (el) {
     el.style.display = 'none'
  })
}

为什么不只是第一个?

4

1 回答 1

2

jQuery 中的访问器方法返回单个值,因为它更简单且更普遍有用。如果.html()API 要为所有元素返回值innerHTML,那意味着它必须返回一个数组。反过来,这意味着在想要单个元素的内容的最常见情况下,您必须添加数组访问。还有一个问题是要准确知道哪个返回值与哪个选定元素对应。换句话说,如果.html()返回一个元素内容数组:

var contentList = $('.someClass, span, .hidden .container').html();

如果“contentList”只是一个简单的数组,那它有什么用呢?代码如何知道每个元素来自哪个 DOM 节点?当然有解决方案,但是为了支持罕见的一般情况,简单的情况再次变得复杂。

当然,您也可以自己获取列表.map()。我认为这只是一个聪明、实用、务实的 API 设计问题。

于 2012-11-08T18:16:16.413 回答