2012-10-21 20 views
9

Umut bunun için basit bir çözüm var. Etkinlik özelliklerine sahip tüm html öğelerini seçmek istiyorum. Örneğin: onclick, onkeypress vb. Her bir öznitelik tarafından ayrı ayrı seçilmeden JQuery kullanarak bunu yapmanın en kolay yolu var mı?JQuery kullanarak olay özelliklerine sahip öğeler nasıl seçilir?

Teşekkürler

+0

Şaşırtıcı bir şekilde, şu ana kadar verilen cevaplardan hiçbiri, ilginç sorunuzu yanıtladı. – gdoron

cevap

4

Ben senin sorunun kısa cevabı hiçbir olduğuna inanıyoruz.

Farklı HTML etiketleri farklı etkinlikleri destekler, bu nedenle jQuery kodunda bir yerde kodlanmış olması gerekir. Ve jQuery kodunu okuyarak, örneğin, onkeypress olayına herhangi bir başvuru bulamıyorum.

Yani, sadece Has Attribute Selector[attribute] güvenebilirsiniz düşünüyorum: değeri özgü değildir

$('[onclick], [onkeypress], [etc]'); 
0

Tüm öğeleri ayrıştırabilir ve kontrol edebilirsiniz. Gerçekten verimli değil, ama işe yaramalı.

Kontrol get all elements with onclick in them?

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]); 
    } 
} 
1

varsa, this approach deneyebilirsiniz.

$([attr1],[attr2],...,[attrN]) selektör dayanan "hey sen insanlara", baskılar Aşağıdaki demo: O inşaat dayanarak

<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()); 
});​ 

, basit sarıcı yazılabilir: Böyle eklentinin

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

Kullanımı Aşağıdaki ifadede de "hey siz insanlar" yazıyor:

hoşuna

$.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; 
    }); 
}; 

ve kullanımı:

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

Ve bu verecektir

+0

Bu soruya nasıl cevap veriyor? – gdoron

+0

gdoron haklı. Tüm olayları listelemek yerine bir tür: hasEvent seçicisi olup olmadığını bilmek istiyor. –

1

Sen, üzerinde ile başlar şöyle bir özelliği olan unsurları bulmak için özel bir filtre işlevi yapabilir ile başlayan bir özniteliği olan sayfasındaki TÜM öğeler (* seçiciyi kullanırken performanstan sakının):

$("*").filterOn().each(function() { 
    console.log('Element '+this.tagName + ' has an on... attribute'); 
}); 
+0

Bu yalnızca, yalnızca standart HTML öznitelikleriyle çalışıyorsanız güvenlidir. –

+0

@LucaFagioli Evet, sadece OP'nin problemini çözmek için başka bir olasılık eklemeye çalışıyorum, olayının standart html öznitelikleri ile bağlandığı durumu için anladım.OP onun html şablonunu daha iyi biliyor ve çözümün kendi özel durumu için yararlı olup olmadığını bilecek, ancak plakaya farklı çözümler ekliyorum :-) – Nelson

+0

Ve bu zayıf bir kontrol. Doğru bir sözdizimine sahip olsa da (yalnızca standart HTML öznitelikleri bağlamında), farklı HTML etiketleri yalnızca bu tür olayların bir alt kümesini destekler. Haritaya [tag :: [attributes]] karşı bir kontrol eklemelisiniz. Ama çok fazla tüketmeye başladığına inanıyorum. –

İlgili konular