問題タブ [nodelist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
dom - NodeList はどのように実装されていますか?
DOM NodeList (たとえば element.getElementsByTagName によって返される) は、スナップショットではなく、NodeList の作成後に行われたドキュメントへの変更を反映するという点で興味深いオブジェクトです。
そのようなコレクションをどのように実装するのか疑問に思っていました.完全に遅延評価は恐ろしく遅くなければなりませんが、キャッシュされたバージョンの一貫性を保つには、内部で多くの簿記が必要です.
この件に関するブログ記事をグーグルで検索し、関連する Mozilla のソース コード ファイルを見つけようとしましたが、すぐには何も見つかりませんでした (そして、何かがすぐに見つからない場合は、ここに来ます...)。
では、Firefox、Safari、Internet Explorer (およびその他の非ブラウザー DOM 実装) はどのように NodeList を処理するのでしょうか?
javascript - JavaScript NodeList
document.getElementsByTagName の 2 回の呼び出しによって返される 2 つの NodeLists を結合する方法はありますか?
たとえば、次のコードがあります
結果をループしたい。1ループで可能ですか?
前もって感謝します!
xml - groovy の markupbuilder にノード リストを渡すことはできますか?
私はgroovyでXML処理を行っています。具体的には、XMLParser を介して XML ファイルを吸入し、メモリ内処理のバッチ全体を実行してから、結果のデータを MarkupBuiler を介して XML にシリアル化します。
ファイル内のデータの大部分は、xml ベースではないオブジェクト階層に転送されて GUI と通信し、処理が行われるため、2 つの XML ファイルが互いを認識することはありません。
ただし、ソース ファイルの端にある XML のスラッグが 1 つあります。これは、ほとんどまたはまったく処理せずに、出力 XML ファイルに逐語的にコピーする必要があります。XMLParser から MarkupBuilder にノードリストを渡し、それをドキュメントに挿入する方法はありますか?
このようなもの:
javascript - [].forEach.call(...?
私は、次のように nodeLists で forEach メソッドを使用することの大ファンです。
私は疑問に思っていましたが、そのようにすると、通常の方法よりも時間がかかりますか? 例えば
java - xpathの高速化
次のような形式の 1000 エントリ ドキュメントがあります。
ここには 1000 を超えるエントリ ノードがあります。基本的にすべてのノードを1つずつ取得し、各ノードで分析を行うJavaプログラムを作成しています。しかし、問題は、ノードの検索時間がその数とともに増加することです。たとえば、最初のノードを取得するのに 78 ミリ秒かかり、2 番目のノードを取得するのに 100 ミリ秒かかり、増加し続けます。また、999 個のノードを取得するには 5 秒以上かかります。これは非常に遅いです。このコードを、1000 を超えるエントリを持つ XML ファイルにプラグインします。数百万のような人もいます。ドキュメント全体を解析する合計時間は 5 分以上です。
この単純なコードを使用してトラバースしています。これは、 xpathnxp
からノードを取得するためのすべてのメソッドを備えた独自のクラスです。
ファイルのdoc
ドキュメントです。i
取得するノードの番号です。
また、私がこのようなことをしようとすると
私は同じ問題に直面しています。
ノードの tretirival を高速化する方法については誰もが解決策を持っているため、XML ファイルから 1 番目のノードと 1000 番目のノードを取得するのに同じ時間がかかります。
xpathtonode のコードは次のとおりです。
fromxpathtonodes のコードは次のとおりです。
そしてここからがスタート
javascript - Javascript - 複数の NodeList を連結する
私は当初、IE または古いブラウザーで関数Array.concat()
の結果の機能をシミュレートするエレガントな方法を求めていました。サポートされていないようだったからです。もちろんそうです-返されたオブジェクトがそれをサポートしなかった理由は、それが. おっとっと!getElementsByTagName
concat
Array
getElementsByTagName
実際には を返しますNodeList
。本当の問題は、ドキュメント内のすべてのフォーム要素 (input、select、textarea、button) の単一のリストを取得してそれらをループする良い方法は何ですか? 配列は必要ありません...単一NodeList
でも完璧です。
これは企業のイントラネット用であるため、IE6を使用していることに注意してください(ただし、まもなくIE8になります)。
私が思いついた答えは次のとおりです。
それらを 1 つに詰め込む良い方法について心配するよりも、コードを別の関数に入れ、異なるノードリストで 3 回呼び出す方が簡単になり、おそらくパフォーマンスが向上しました。
私は最終的に MooTools の使用に切り替えました (すべての異なるフレームワークの比較を数時間読んだ後)。これで、必要なアイテムの配列を取得するのは非常に簡単になりました。最善の方法を見つけ出そうと頭を悩ませるよりも、このような JavaScript フレームワークを使用することをお勧めします。もちろん、私は生の言語を実際に学ぶことには大賛成です (フレームワークの使用を長い間控えてきたのはそのためです) が、物事を進めるための最速の方法であるとは限りません。コーダーの言語能力の向上として。
更新: ほぼ 2 年後、私は jQuery を使用するだけで完了しました!
javascript - JavaScript NodeListを配列に変換する最速の方法は?
ここで以前に回答された質問は、これが最速の方法であると言っていました:
私のブラウザでのベンチマークでは、これより 3 倍以上遅いことがわかりました。
どちらも同じ出力を生成しますが、2 番目のバージョンが可能な限り最速の方法であるとは信じがたいと思います。
これは私のブラウザ (Chromium 6) の癖ですか? それとももっと速い方法がありますか?
編集:気になる人のために、私は以下に落ち着きました(これは私がテストしたすべてのブラウザーで最速のようです):
EDIT2:さらに速い方法を見つけました
javascript - ライブ NodeList コレクションと非ライブ NodeList コレクションを区別する方法は?
document.getElementsByTagName('div') と document.querySelectorAll('div') の両方が NodeList コレクションを返します。唯一の違いは、最初のメソッドがライブ コレクションを返し、2 番目のメソッドが静的コレクションを返すことです。
問題は、これらのオブジェクトを検査することによってのみ、あるオブジェクトを別のオブジェクトと区別する機会はありますか (つまり、「ライブネス」をテストするためにいくつかのアイテムを追加/削除しようとしないでください)?
前もって感謝します
java - JavaでXMLから等号を持つ属性タグを読み取る方法は?
Java を使用して XML ファイルを解析していますが、次のように表示される XML ファイル内のノードを解析できます。
<name><given>familyName</given></name>
以下に示すスニペットのようなコードを使用して:
しかし、次のようにフォーマットされた属性を読み取ることができません:
上記のような値を別の方法で読み取るにはどうすればよいですか? 前もって感謝します。
javascript - NodeList を配列に変換する
IE 8 でa を配列に変換するのに苦労していNodeList
ます。以下は Chrome では完全に機能しますが、IE 8toArray()
では有効と認識されません。
正気を確認するためだけにプロトタイプ関数を配列に追加しようとしましたが、正しく動作しました。NodeList
それは、IE 8が実際には?を返さないと私に思わせます。完全な例を次に示します。
私は何を間違っていますか?