0

セレクター エンジンの作成に関する次のチュートリアルを見つけました。 http://blog.insicdesigns.com/2010/04/creating-your-own-selector-engine/

JavaScriptには次のような関数があります

  • getElementById()
  • getElementsByTageName()
  • getElementsByName()

など、.....しかし、同じ機能のために、セレクターエンジンで、次のようなチェックを行っています

 this.nodes[i].tagName == nm.toUpperCase() 

getElementsByTagName の代わりに.このアプローチの利点は何ですか?...

また、すべてのノードを変数に割り当てる使用法は何ですか

 e.getElementsByTagName('*');
4

3 に答える 3

1

this.nodes[i].tagName == nm.toUpperCase()はタグ名でノードのリストをフィルタリングするメソッドの一部です...したがって、「タグ名で要素を取得する」とは何の関係もありません

最後のポイントは本当の質問ではありません。「なぜすべてのノードを選択するのか」の理由を知りたいですか?さて、あなたはセクターエンジンを書いています...

于 2012-04-27T15:21:15.047 に答える
1

次の行

this.nodes[i].tagName == nm.toUpperCase() 

関数内にありますofTag。これは、指定された名前のノードを探しているノードのセットをフィルタリングしています。

次の行

e.getElementsByTagName('*');

ノードの下のすべての子/子孫を取得して、後で次のようにフィルタリングできるようにします

new DOMNodes(Selector.getAll(document)).ofTag('p').hasClass('note');  
于 2012-04-27T15:21:19.103 に答える
1

tagName要素のプロパティを取得するときに矛盾があります。一部のブラウザーは大文字を返し、他のブラウザーは小文字を返します。値の出力を正規化するには、さらに操作を続行する前に、いずれかを実行する必要があります。

に関してはe.getElementsByTagName('*');、私は最近、OPがプレフィックスを持つ属性を含むすべての要素を見つけたいという質問に答えました。このような要素を取得する唯一の方法は、DOM 内のすべての要素を取得し、それらの属性名を調べることです。mce_

これの良い応用もありgetElementsByTagName('*')、それは要素の直接の子を決定しています。たとえば、非常に深い DOM です。属性に基づいて特定の親要素を見つけてその子を取得する場合、通常は本体から下に向かって再帰検索を実行して親を見つけます。これには多くの再帰操作が必要です。その後、その子を決定します。

これを行う別の方法は、すべてのタグを取得し、それらの親ノードを決定することです。属性を持つ親がある場合、それらは直接の子です。このメソッドは再帰を必要とせず、返されgetElementsByTagName('*')た をループするだけです。nodeList

于 2012-04-27T15:23:25.800 に答える