[解決済み] document.querySelectorAllはなぜ本当のArrayではなくStaticNodeListを返すのですか?
質問
を実行することができないのが悩ましいです。
document.querySelectorAll(...).map(...)
を実行することができないのが気になり、まだ答えを見つけることができません。
http://blowery.org/2008/08/29/yay-for-queryselectorall-boo-for-staticnodelist/
なぜ Array を取得しないのか、技術的な理由をご存知の方はいらっしゃいますか? あるいは、なぜ StaticNodeList は Array を継承しないのでしょうか?
map
,
concat
などでしょうか?
(ちなみに1つの機能だけなら
NodeList.prototype.map = Array.prototype.map;
...しかし、繰り返しになりますが、そもそもなぜこの機能が(意図的に?)ブロックされているのでしょうか)
どのように解決するのですか?
私は、W3C の哲学的な決定であると信じています。W3C DOM [仕様] の設計は、JavaScript の設計とかなり直交しており、DOM は というのは であり、プラットフォームや言語に中立であるためです。
" のような決定。
getElementsByFoo()
は、順序付き
NodeList
"または "
querySelectorAll()
は
StaticNodeList
のような)言語依存の実装に基づいて返されるデータ構造の整列について、実装が心配する必要がないように、非常に意図的なものです。
.map
は JavaScript と Ruby の Array で利用可能ですが
ではなく
にはありません)。
W3Cは低い目標を掲げています。
NodeList
を含むべきであると言うでしょう。
読み出し可能な
.length
プロパティは、unsigned long 型です。
は、すべての実装が少なくとも
その
をサポートする必要があると考えるからです。
[]
インデックス演算子をオーバーロードして位置指定要素の取得をサポートすべきであると明示しません。
getElementsByFoo()
を実装したくても演算子のオーバーロードをサポートできないような、かわいそうな言語が現れるのを阻止したいからです。これは、仕様の大部分を通じて存在する一般的な哲学です。
John Resig は は同じような選択肢を述べました。 を提案し、それに対して を追加した。 :
私の主張は、そうではなく
NodeIterator
がとても DOM 的ではないということではなく、それは JavaScript 的でないということです。それは JavaScript 言語に存在する機能を利用せず JavaScript 言語に存在する機能を その能力を最大限に活用することができないのです...。
私はいくらか共感しています。もし DOM が JavaScript の機能を念頭に置いて特別に書かれていたなら、もっと厄介でなく、もっと直感的に使えるようになったでしょう。同時に、私は W3C の設計上の決定を理解しています。
関連
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] どうすればjQueryに非同期ではなく、同期のAjaxリクエストを実行させることができますか?
-
[解決済み] Node.js の console.log() で '[Object]' ではなく、完全なオブジェクトを取得するにはどうすればよいですか?
-
[解決済み] parseInt(1/0, 19)はなぜ18を返すのですか?
-
[解決済み] jQueryやgetElementByIdのようなDOMメソッドが、要素を見つけられないのはなぜですか?
-
[解決済み] CSSセレクタの">"(大なり小なり)とはどういう意味ですか?
-
[解決済み] Node.jsのfs.readFile()はなぜ文字列ではなくバッファを返すのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] jQueryの$という記号の意味は何ですか?
-
[解決済み] Chromeの拡張機能開発にWebStormを使用するにはどうすればよいですか?
-
[解決済み] javascriptでオプションのパラメータを扱う
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる