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()メソッド

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

なぜ最初だけではないのですか?

4

1 に答える 1

2

jQuery のアクセサー メソッドは単一の値を返します。これは、単純で一般的に役立つためです。.html()API がすべての要素に対して値を返す場合、innerHTMLそれは配列を返す必要があることを意味します。つまり、1 つの要素の内容が必要な最も一般的なケースでは、配列アクセスを追加する必要があります。また、どの戻り値がどの選択された要素と一致するかを正確に知るという問題もあります。つまり、.html()要素の内容の配列が返された場合:

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

「contentList」が単純な配列だとしたら、それは何の役に立つでしょうか? コードは各要素がどの DOM ノードから来たのかをどのように知るのでしょうか? もちろん、これには解決策がありますが、まれな一般的なケースをサポートするために、単純なケースが複雑になっています。

もちろん、自分でリストを取得することもできます.map()。これは、スマートで実用的で実用的な API 設計の問題にすぎないと思います。

于 2012-11-08T18:16:16.413 に答える