/ / Wie wähle ich mit Jquery Elemente mit Ereignisattributen aus? - Fragen, Ereignisse

Wie wähle ich Elemente mit Ereignisattributen mit Jquery aus? - Jquery, Veranstaltungen

Hoffe, es gibt eine einfache Lösung dafür. Ich möchte alle HTML-Elemente mit Ereignisattributen auswählen. Zum Beispiel: onclick, onkeypress usw. Gibt es eine einfachste Möglichkeit, dies mit Jquery zu tun, ohne jedes Attribut einzeln auszuwählen?

Vielen Dank

Antworten:

4 für die Antwort № 1

Ich glaube, dass die kurze Antwort auf Ihre Frage lautet Nein.

Verschiedene HTML-Tags unterstützen also verschiedene EreignisseSie sollten irgendwo im jQuery-Code fest codiert sein. Wenn ich den jQuery-Code durchlese, kann ich zum Beispiel keinen Verweis auf das Ereignis onkeypress finden.

Ich denke, Sie können sich einfach darauf verlassen Hat Attributauswahl [attribute]:

$("[onclick], [onkeypress], [etc]");

1 für die Antwort № 2

Sie können eine benutzerdefinierte Filterfunktion erstellen, um Elemente mit einem Attribut zu finden, das mit beginnt auf , so:

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

und benutze es wie:

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

Dadurch erhalten Sie ALLE Elemente auf der Seite, die ein Attribut haben, das mit beginnt auf (Achten Sie bei der Verwendung auf die Leistung * Wähler):

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

1 für die Antwort № 3

Wenn der Wert nicht spezifisch ist, können Sie es versuchen dieser Ansatz.

Die folgende Demo wird gedruckt "Hey Leute", beyogen auf $([attr1],[attr2],...,[attrN]) Wähler:

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

Basierend auf dieser Konstruktion kann ein einfacher Wrapper geschrieben werden:

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

Die Verwendung eines solchen Plugins in der folgenden Anweisung wird ebenfalls gedruckt "Hey Leute":

$(".container").hasAttrib("id","name").each(function(){
console.log($(this).text());
});

0 für die Antwort № 4

Sie können alle Elemente analysieren und überprüfen. Nicht wirklich effizient, aber es sollte funktionieren.

Prüfen alle elemente mit onclick in sie bekommen?

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