2016-04-22 4 views
1

パフォーマンスを向上させるために、ドキュメント全体を検索せずにgetElementsByTagName( "td")を実行したいと思います。これらの要素を検索する範囲を絞り込む方法はありますか?ここに私のコードは次のとおりです。ドキュメント全体を検索せずにページ上の要素を検索

$ie.Document.getElementsByTagName("td") | ? {($_.className -match 'NodeDocument') 

これに伴う問題は、それが結果を返すために10分以上かかると、それはより速く行くので、私が検索されるものの範囲を狭めるたいと不要な要素を返さないということです。

例として、下の画像のハイライト表示された要素を検索し、その下のフォルダ内では検索しません。 「Conventional」フォルダ内を見るだけを指定する方法はありますか?

何かすべての助けがありがとうございます。ありがとうございました。返信用

おかげで、私は、XPathを実装しようとします。その価値は、HTMLのスクリーンショットです。 #1は、従来のフォルダの要素です。 #2は、フォルダ内の最初のドキュメント要素です。 enter image description here

更新:Chromeのインスペクタの$ conventionalフォルダにある.getElementsByTagName()を呼び出すFrodoの方法を試してください。最初のコンテナノードを探し、その内検索についてどのように

enter image description here

+1

Xpathはうまくいくかもしれないが、コード(html)を見ずにサンプルを書くことは不可能です。 –

+0

返事をありがとう。私はXPathを実装しようとしますが、私はいくつかの問題に直面すると思います。元の投稿に自分のhtmlのスクリーンショットを追加しました。 – Quanda

+0

'SelectNodes()'とxpathで遊びたいなら、IE com-objectをexに置き換える必要があります。 HTMLアジリティパック –

答えて

0

解決済み。

$DocContainer = $conventional.parentNode.parentNode.parentNode.parentNode.nextSibling 

使用:代わりに(私は子供のように、「TD」NodeDocumentsを持っていませんがわかった)$conventionalフォルダを参照するのは、私は子供のようにNodeDocumentsを持っているdiv要素を指す新しい$DocContainerを作成しましたこの$DocContainerは私が今言うことができる:

$documents = $DocContainer.getElementsByTagName("td") | ? {($_.className -match 'NodeDocument') 

特殊は、実際に親コンテナで新しい要素を参照するために私の考えを与えるためフローデFにお願いします。同様の問題と他の人のために

は、あなたの要素はDOMツリー内にある場所をテストするためにクロムインスペクタ/コンソールを利用してください。 Chromeのビルトインインスペクタ/コンソールは非常に強力で、多くの時間と手間を省くことができます。 .parentNode.nextSiblingchildNodesなどのメソッドは、DOMのトラバーサルの鍵です。お役に立てれば。

+1

あなたは解決策を見つけたと聞いて嬉しいです! :-)クイックコメント:これは本当に重複した回答です。唯一の違いは、コンテナノードにアクセスする方法です。これは、システム固有のもので、他の人が再利用できないものです。そういうわけで、私はあなたがそれを動作させるために異なる容器をうなずいてみる必要があるかもしれないと言いました。 SOの回答は将来の読者にも役立つはずなので、ここでの解決策であるのは「ゲームプラン」です。 –

3

:ここでは、結果のスクリーンショットはありますか?それは元にあなたを制限するだろう。 5 td - あなたが今持っているように、where-objectでフィルタリングする必要があり、1000+ではないノード。

$conventional = $ie.Document.getElementById('OurLibrary_LibTocUC$LandingPanel$toc1$ExpertTree1_nl_23') 
$documents = $conventional.getElementsByTagName("td") | ? { $_.className -match 'NodeDocument' } 
+0

ありがとうございました。私は今これを試してみる – Quanda

+0

うーん、うまくいきません。このメソッドを試してみると '$ documents'が空に戻ります。あなたは 'を呼び出すことができますか?div要素のgetElementsByTagName() '?私はそれがうまくいくと思うだろうが、それはない – Quanda

+0

あなたは '$ conventional'がノードを見つけたと確信していますか?私はコンテナのIDにタイプミスがあったので、ソースからコピーして安全にしてください。あるいは '$ conventional'をtable要素や関心のあるtd要素をラップする別の型のノードに設定してみることができます。私は' $ conventional'のcontainer-divを使ってランダムなWebサイトでそれをテストし、 '$ conventional.getElementsbyTagName(" a ")'すべてのリンクを取得します。 –

関連する問題