/ / ¿Cómo seleccionar elementos con atributos de evento usando Jquery? - jquery, eventos

¿Cómo seleccionar elementos con atributos de evento usando Jquery? - jquery, eventos

Espero que haya una solución simple para esto. Quiero seleccionar todos los elementos html con atributos de evento. Por ejemplo: onclick, onkeypress, etc. ¿Existe una forma más sencilla de hacerlo utilizando Jquery sin seleccionar cada atributo por separado?

Gracias

Respuestas

4 para la respuesta № 1

Creo que la respuesta corta a tu pregunta es no.

Diferentes etiquetas HTML soportan diferentes eventos, por lo quedeberían estar codificados en algún lugar del código jQuery. Y leyendo el código de jQuery, no puedo encontrar ninguna referencia al evento onkeypress, por ejemplo.

Entonces, creo que solo puedes confiar en Tiene selector de atributo [attribute]:

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

1 para la respuesta № 2

Podría hacer una función de filtro personalizado para encontrar elementos con un atributo que comience con en , al igual que:

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

y utilízalo como:

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

Y esto le dará TODOS los elementos en la página que tiene un atributo que comienza con en (cuidado con el rendimiento al usar * selector):

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

1 para la respuesta № 3

Si el valor no es específico, puedes probar Este enfoque.

La demo a continuación imprime "hey ustedes", Residencia en $([attr1],[attr2],...,[attrN]) selector:

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

Sobre la base de esa construcción, se puede escribir una envoltura simple:

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

El uso de dicho complemento en la declaración a continuación también imprime "hey ustedes":

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

0 para la respuesta № 4

Podrías analizar todos los elementos y comprobar. No es realmente eficiente, pero debería funcionar.

Comprobar Obtener todos los elementos con un clic en ellos?

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