javascript_javascriptのヒントでNodeListをArray配列として扱う方法
例:
varアンカー = document.getElementsByTagName ("a" );
for (i = 0; i
// ここにコードを入力します
}
上記のコードは、ドキュメント内のすべてのリンク要素を取得し、トラバースして何かを行うことを意味します。
おそらく、このメソッドで取得した DOM 要素のグループは配列ではないのではないかと疑問に思うかもしれません。ご存知のとおり、長さ属性を直接取得でき、インデックスに従って対応する個々の要素を取得することもできます。ダニエルの有名なアヒル理論によると、アヒルのように歩き (長さ属性を持ち)、アヒルのように鳴き声を上げます。インデックス値に)の場合、それはアヒルです。結論は自明ですよね?
すでに JavaScript を少し深く理解している場合は、値を取得するためにインデックスを付けることができる length 属性があります。これは引数で行うことができるようです。配列?実際の開発では通常の配列として操作しますが、lengthやforループなどは非常に使いやすく、エラーも発生しません。
しかし、実際には配列 (Array) ではなく、NodeList です。 NodeList は配列ではありません。
なんと驚くことでしょう?
1. NodeList が配列ではないのはなぜですか?
NodeList が配列であるかどうかを確認します。おそらく、最も直接的な方法は、Array 独自のプッシュ メソッドとポップ メソッドを試すことです。
varアンカー = document.getElementsByTagName("a");
var newEle = document.createElement("a");// new a element
anchors.push(newEle);//push
var element=アンカーs.pop();//pop
上記のコードかどうかは、自分でテストできますプッシュまたはポップ メソッドである場合、例外なく、プッシュまたはポップ メソッドが存在しないことを示すメッセージが表示されます。まだ質問がありますか?これで終わりですか?このような一方的なテストでは、Louzhu は落ち着いてリラックスすることができません。引数が配列ではないことを証明したのと同じ方法を使用して、NodeList が配列ではないことを証明できます。以下のコードを見てください:
Array.prototype .testNodeList = "テストノードリスト"; //プロトタイプ属性を配列に追加します
function funcNodeList() {
var links = document.getElementsByTagName("a");
alert(links.testNodeList); >}
function test() {
alert(new Array().testNodeList); //#ff0000 とは何ですか? 🎜>test( ); //テストしてみます
上記の分析を通じて、NodeList が配列 (Array) ではないことを確認できます。では、コレクションを操作する習慣に従って NodeList を操作するにはどうすればよいでしょうか?
NodeList は長さがあるので、for ループでインデックスして値を取得するのは簡単ではないでしょうか。笑、最も直接的なアイデアは次のとおりです。 g
コードをコピーします
arr.push(ele); //arr は必要な配列です
}
まず、配列を作成し、NodeList を走査します。を追加し、配列変数に単一の要素をプッシュし、最後に配列変数を操作します。自分の知性が侮辱されたように感じますか?
上記は冗談ではありません。以下は Lou Zhu がインターネット上の Google で見つけたもので、2 行のコードで NodeList を Array に変換して使用できます。
コードをコピー
しかし、最も残念なことが起こりました。上記のコードは邪悪な IE では正しく動作せず、IE は「JScript オブジェクトが見つかりません」というプロンプトを表示します。
あなたは上記の分析を否定し、操作のために NodeList を Array に変換する必要はないと考えるかもしれません。実際、Lou Zhu は、どのようなプログラミング言語であっても、型変換は非常に賢明ではない行為であると個人的に信じています。最も一般的なものは、C# でのボックス化とボックス化解除、および数値データ変換ですが、これらにはパフォーマンス上の問題があり、注意しないと鉱山事故を引き起こす可能性があります。しかし、Lou Zhu はなぜ NodeList を単独の配列として扱うのでしょうか? NodeList を動的に変更する場合、NodeList を直接操作すると、気付かないうちに誤って制限エリアに入ってしまう可能性が高いためです。以下に例を示します。
(1)、HTML ドキュメントのフラグメント
(2)、JavaScript テスト コード
varアンカー = document.getElementsByTagName("a");
for (i = 0; i var ele= document.createElement("a");
ele.setAttribute("href", "http://www.cnblogs.com/jeffwongishandsome/"); .appendChild( document.createTextNode("new link test"));
document.getElementById("divAnchor").appendChild(ele); // div は新しいリンクを追加します
}
varアンカー = null; //Array
try {
anchors = Array.prototype.slice.call(links) ;
}
catch (e) { //ie と互換性があります
anchors = new Array();
for (var i = 0; i < links.length; i ) {
anchors.push (links[i]);
}
}
for (i = 0; i
ele.setAttribute("href", "http://www.cnblogs.com/jeffwongishandsome/");
ele.appendChild(document.createTextNode("new)リンクテスト") ;もちろん、これは厳密ではありません。私たちの慣れ親しんだコーディング習慣に少し手を加えるだけです。
document.getElementById("divAnchor").appendChild(ele); // div は新しいリンクを追加しますLink
}
ここまでで、ご質問のある方も無い方も、読んでいただきありがとうございます。アドバイスをお待ちしております。
作者: ジェフ・ウォン

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









foreach ループを使用して PHP 配列から重複要素を削除する方法は次のとおりです。配列を走査し、要素がすでに存在し、現在の位置が最初に出現しない場合は、要素を削除します。たとえば、データベース クエリの結果に重複レコードがある場合、このメソッドを使用してそれらを削除し、重複レコードのない結果を取得できます。

PHP で配列をディープ コピーする方法には、json_decode と json_encode を使用した JSON エンコードとデコードが含まれます。 array_map と clone を使用して、キーと値のディープ コピーを作成します。シリアル化と逆シリアル化には、serialize と unserialize を使用します。

PHP の配列キー値の反転メソッドのパフォーマンスを比較すると、array_flip() 関数は、大規模な配列 (100 万要素以上) では for ループよりもパフォーマンスが良く、所要時間が短いことがわかります。キー値を手動で反転する for ループ方式は、比較的長い時間がかかります。

PHP で配列のディープ コピーを実行するためのベスト プラクティスは、 json_decode(json_encode($arr)) を使用して配列を JSON 文字列に変換し、それから配列に戻すことです。 unserialize(serialize($arr)) を使用して配列を文字列にシリアル化し、それを新しい配列に逆シリアル化します。 RecursiveIteratorIterator を使用して、多次元配列を再帰的に走査します。

PHP の array_group_by 関数は、キーまたはクロージャ関数に基づいて配列内の要素をグループ化し、キーがグループ名、値がグループに属する要素の配列である連想配列を返すことができます。

多次元配列のソートは、単一列のソートとネストされたソートに分類できます。単一列のソートでは、array_multisort() 関数を使用して列ごとにソートできますが、ネストされたソートでは、配列を走査してソートするための再帰関数が必要です。具体的な例としては、製品名による並べ替えや、売上数量や価格による化合物の並べ替えなどがあります。

PHP の array_group() 関数を使用すると、指定したキーで配列をグループ化し、重複する要素を見つけることができます。この関数は次の手順で動作します。 key_callback を使用してグループ化キーを指定します。必要に応じて、value_callback を使用してグループ化値を決定します。グループ化された要素をカウントし、重複を特定します。したがって、array_group() 関数は、重複する要素を見つけて処理するのに非常に役立ちます。

PHP は、Web サイト開発およびデータ処理分野で広く使用されている、一般的に使用されるサーバー側スクリプト言語です。 PHP では、配列内の値をサイズで並べ替えるのは非常に一般的な要件です。組み込みのソート関数を使用すると、配列を簡単にソートできます。以下では、PHP を使用して配列内の値をサイズで並べ替える方法を、具体的なコード例とともに紹介します。 1. 配列内の値を昇順に並べ替えます。
