2009-03-19 10 views

答えて

6

それはjQueryのでネイティブにサポートされていませんが、あなたはhasEvent pluginを使用して、独自のカスタムセレクタを書くことができます。

jQuery.expr[":"].click = "jQuery(a).hasEvent('click');"; 

$("a:click").doStuff(); 

EDIT:また、より完全であるとのうちの作品Event Bound Selector pluginあり

ボックスも大きくなります。

+0

素晴らしい。私はそれがどのように機能するのだろうか。 – Vasil

0

いいえすべての要素を反復処理し、イベントバインディングがあるかどうかを確認できます。しかし、あなたが検索の範囲を狭めることができるように、どのような種類の要素がそのイベントバインディングを持っているのかという手掛かりがない限り、それはあまり効率的ではありません。

+0

それはので、とても恐ろしくineffecientではないかもしれません私はjqueryはすべてのクエリのすべての上に多くのループを行うと思われる – cobbal

0

位置を検索する:

button: function(elem){ 
     return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; 
    }, 
    input: function(elem){ 
     return /input|select|textarea|button/i.test(elem.nodeName); 
    }, 
    //init custom 
    ev: function(elem,i,match){ 
     var what = $(elem).hasEvent(match[3]); 
     var type = (typeof what); 
     return what !== null && type !== undefined; 
    } 
    //End custom 
}, 
setFilters: { 
    first: function(elem, i){ 
     return i === 0; 
    }, 
    last: function(elem, i, match, array){ 
     return i === array.length - 1; 
    }, 
    even: function(elem, i){ 
     return i % 2 === 0; 
    }, 

.....

has()

と同じ使用例:

$('form:ev(submit)'); 
$('input:ev(click)'); 
$('a:ev(click)'); 
関連する問題