2011-02-08 19 views
3

jQueryの選択を拡張して、与えられた選択値をIDとして扱うようにしたいと思います。jQueryのカスタム選択

たとえば、$("foo.bar")を実行すると、jQueryはタグ名fooとクラスバーを持つすべての要素を選択しようとしますが、jQueryでIDがfoo.barの要素を選択します。ドットをエスケープして毎回#を前に付ける代わりに、私は$("id:foo.bar")のような機能を実行できるようにjQueryに関数を追加したいと思います。

これはjQueryで可能ですか?もしそうなら、誰も私にいくつかの例を教えてもらえますか?

ありがとうございました。

+0

驚異の理由...なぜですか?読みやすさ? –

+0

私のプロジェクトでは、foo.barなどのネストされた要素名が非常に一般的なSpring MVCが使用されています。私はこれらの要素を多く選択する必要があり、ID記号の前に数字記号を付ける必要があり、さらに重要なことに、毎回ドットをエスケープするのは面倒です。 –

+1

これを実行することでパフォーマンスが低下することに気付いていますか? – RightSaidFred

答えて

2

、それがためにページ上のすべての要素をテストする必要がありますそのIDはdocument.getElementByIdの代わりに使用します。

さらに便利にしたい場合は、独自のラッパーを作成してください。必要に応じてjQueryのネームスペースを使用することができます。

jQuery.byId = function(id){return $(document.getElementById(id));}; 

$.byId('foo.bar').addClass('something'); 
+0

ありがとう、これは素晴らしいです。私はこれを答えとして受け入れるだろうが、それは遅すぎる... –

+2

@トム:あなたは受け入れられた答えを変更することはできますが、それは私にとって重要ではありません。私はあなたと将来の読者が、普遍的な選択に続いてカスタム属性フィルタを実行することが、パフォーマンスについて気にするならば、本当に悪いことを知っていることを確実にしたかったのです。 – RightSaidFred

1

私はこれを行うための具体的なコードはありません。 jqueryのグローバルな振る舞いをオーバーライドすると、他の人が作ったプラグインが壊れる可能性があることに注意してください。できる場合は、jquery 1.5の 'サブ'機能を使用する必要があります。これは、他のプラグインのデフォルトの機能を維持しながら、jqueryの機能をサブクラス化するために特別に設計されています。

+0

ここにリンクがあります。 http://api.jquery.com/jQuery.sub/ – rcravens

+0

この機能は削除されました(1.7では廃止され、1.9では削除されました) –

2

あなたはそれがある$("[id=foo.bar]")

3

を行うことができます。 .expr[]を拡張することで、独自のセレクタを作成できます。例:

$.extend($.expr[':'], { 
    'id': function(elem, i, attr){ 
     return(elem.id === attr[3]); 
    } 
}); 

使用法は次のようになります。

$(':id(foo.bar)'); 

デモ:あなたは、属性フィルター付きIDの選択を交換する場合http://www.jsfiddle.net/cwwGk/1/

+0

+1ありがとうございました。私はこれを知らなかった。 – rcravens