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