2

私は一連の document.evaluate を実行してから、 for ループ on を使用して各結果を反復処理していますresult.snapshotLength

各ループ (a thisDiv.parentNode.removeChild) 内で同じことを行うので、ループを 1 つだけ実行したいと思います。

私はそれを読んだ:

5 番目のパラメーターを使用して、2 つの XPath クエリの結果をマージできます。document.evaluate への以前の呼び出しの結果を渡すと、両方のクエリの結合された結果が返されます。

だから私は試しました:

comDivs = document.evaluate(
    "//div[@class='class name 1']",
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null);

ggDivs = document.evaluate(
    "//div[@class='class name 2']",
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    comDivs);

しかし、これは機能しません (エラー ログはありませんが、機能しません)。

それを行う適切な方法は何ですか?異なる XPath クエリを実行して、結果をマージできますか? または、クエリ自体に正規表現または何らかの代替を渡す方法はありますか?

私が今持っているコードは次のとおりです: http://userscripts.org/scripts/review/58939

ご協力いただきありがとうございます !

4

1 に答える 1

1

ユーザースクリプトで XPath を単純化し、単一の式を " |"で結合できます。

"//div[@class='reactionsCom reactionsNiv1 first'] | " + 
"//div[@class='googleBanner'] | " + 
"//div[@class='blocE1B-16b'] | " +
"//div[@class='blocE1B-16b clear']"

または、厳しい条件での 1 つの式でさらに優れています。

"//div[@class='reactionsCom reactionsNiv1 first' or " +
      "@class='googleBanner' or " +
      "@class='blocE1B-16b' or " +
      "@class='blocE1B-16b clear']"

上記の例のように、iirc 2 番目のクエリは、最初のクエリの結果にそれらが含まれている場合、つまり、//div[@class='class name 2']最初のクエリの結果ノードの子が where の場合にのみ一致を見つけます//div[@class='class name 2']

于 2009-10-01T11:23:15.033 に答える