3

マウスオーバーで要素を強調表示するために JavaScript を使用している SVG ドキュメントがあります。私の要素にはすべて名前があります - 一部の要素は同じ名前を持ちます。なぜなら、それらは複数回表示されますが、論理的に同じものを参照するからです。複製された要素の 1 つのインスタンスにマウスを合わせると、それらすべてが強調表示されるようにします。

強調表示を有効にするために、マウスが置かれている要素の名前を調べます。document.getElementsByName()次に、その名前を共有するすべての要素を検索するために呼び出します。返された要素の配列を使用して、強調表示する適切なスタイルを繰り返し適用します。

これは WebKit ではうまく機能し、Gecko では失敗します - 後者getElementsByNameは未定義であることを通知します。の関数テーブルを見ると、document実際にそうです。getElementsByClassNamegetElementsByTagNamegetElementsByTagNameNSすべてそこにあります。getElementsByName不足している。

Gecko がこのセレクターを除外する理由について何か考えはありますか? この件に関して Google は役に立ちませんでした (私が間違った質問をしたかもしれませんが)。

このセレクターに対する Gecko のサポートの欠如に対するコンパクトな回避策の提案はありますか? クラス属性をハイジャックしたり、(さらに悪いことに) 繰り返されるインスタンスの一意の ID を生成したりして、タスクを達成する必要がないことを強く望んでいます。

4

2 に答える 2

1

問題は、SVG ドキュメントは (X)HTML ドキュメントでもあるのかということです。 https://developer.mozilla.org/en/DOM/document.getElementsByName

FTA:

name 属性は (X)HTML ドキュメントにのみ適用されます。このメソッドは、name 属性をまったくサポートしていない要素に name が配置されている場合など、name 属性を持つすべての要素を返します。

于 2011-02-22T19:25:13.133 に答える
0

@roatin-marthは、ここで回答への道を歩みましたが、回答として投稿することはありませんでした。他の誰かに役立つ場合に備えて、ここで彼の提案をキャプチャすると思いました。

UsingquerySelectorAllは、私が求めていたコンパクトな回避策を提供します — それはより堅牢 (かつ柔軟) でなければなりませんgetElementsByName.

于 2013-03-22T20:45:03.597 に答える