0

NodeLists に関するこの記事を読みました。

http://www.nczonline.net/blog/2010/09/28/why-is-getelementsbytagname-faster-that-queryselectorall/

私が正しく理解している場合、getElementsByTag 名は有効で、querySelectorAll は有効ではありません。では、pNotLive のタイトルが「stackoverflow」である理由を説明してもらえますか? :

var pLive = document.getElementsByTagName( 'p' )[3];
var pNotLive = document.querySelectorAll( 'p' )[3];

pLive.title = "stackoverflow"
console.log( pNotLive.title ); // stackoverflow

//you can run this snippet in your console to verify
4

1 に答える 1

4

リンクが説明しているように、このgetElementsByTagNameメソッドは、DOM が変更されると自動的に更新されるコレクションを返します。したがって、メソッドを呼び出して新しい要素が DOM に追加されると、コレクションは新しい要素で自動的に更新されます。

を使用するquerySelectorAllと、DOM 要素の静的リストが与えられますが、これは自動的には更新されません。

あなたの例で使用した動作の理由は、要素自体ではなく、リストが静的であるためだと思います。したがって、静的アプローチはリストが変更されないことを意味するだけなので、要素を追加/削除してもリストは変更されません。ただし、title属性を呼び出すと、リストは単に要素を指しているだけであり、その要素はリストを作成したときとは異なります。

つまり、(固定データを含む) データ オブジェクトのリストというよりは、(DOM ノードへの) 参照のリストです。

于 2013-04-29T14:18:43.843 に答える