9

これには簡単な回避策があることを願っています。イベント属性を持つすべてのhtml要素を選択したいと思います。例:onclick、onkeypressなど。各属性で個別に選択せずにJqueryを使用してこれを行う最も簡単な方法はありますか?

ありがとう

4

4 に答える 4

4

あなたの質問に対する簡単な答えはノーだと思います。

さまざまなHTMLタグがさまざまなイベントをサポートするため、jQueryコードのどこかにハードコーディングする必要があります。また、jQueryコードを読んでいると、たとえばonkeypressイベントへの参照が見つかりません。

だから、私はあなたがただ属性セレクターを持っている [attribute]ことに頼ることができると思います:

$('[onclick], [onkeypress], [etc]');
于 2012-10-21T15:54:46.733 に答える
1

値が具体的でない場合は、このアプローチを試すことができます。

以下のデモは、セレクターに基づいて「heyyoupeople」を印刷します。$([attr1],[attr2],...,[attrN])

<div class="container">
    <div>no id</div>
    <div id="a">hey</div>
    <span name="b">you</span>
    <p id="c">guys</p>
</div>​

$('[id],[name]').each(function(){
    console.log($(this).text());
});​

その構造に基づいて、単純なラッパーを作成できます。

$.fn.hasAttrib = function() {   
    var attributes = [];
    $.each(arguments, function(index, value){
        attributes.push('[' + value + ']');
    });
    return $(this).find(attributes.join());
};

以下のステートメントでこのようなプラグインを使用すると、「heyyoupeople」も出力されます

$('.container').hasAttrib('id','name').each(function(){
    console.log($(this).text());
});
于 2012-10-21T15:55:19.683 に答える
1

次のように、カスタムフィルター関数を作成して、 onで始まる属性を持つ要素を検索できます。

$.fn.filterOn = function() {
   this.each(function(ind,el) {
       var attrs = el.attributes;
       for (var i = 0; i < attrs.length; i++) {
           if (attrs[i].nodeName.indexOf('on') === 0) return true;       
       }
       return false;
   });
};

次のように使用します。

//elems will contain all input fields with an attribute starting with 'on'
elems = $(':input').filterOn(); 

これにより、 onで始まる属性を持つページ内のすべての要素が得られます( *セレクターを使用する場合はパフォーマンスに注意してください)。

$("*").filterOn().each(function() {
   console.log('Element '+this.tagName + ' has an on... attribute');
});
于 2012-10-21T16:25:34.887 に答える
0

すべての要素を解析して確認できます。あまり効率的ではありませんが、機能するはずです。

オンクリックですべての要素を取得するをチェックしますか?

var allElements = document.getElementsByTagName('*');
for ( var i = 0; i<allElements.length; i++ ) {
    if ( allElements[i].className !== 'theClassNameYoureLookingFor' ) {
        continue;
    }
    if ( typeof allElements[i].onclick === 'function' ) {
        // do something with the element here
        console.log( allElements[i] );
    }
}
于 2012-10-21T15:54:38.193 に答える