El nombre del atributo jQuery contiene

Intento apuntar a los nombres de los atributos que contienen una palabra determinada y no de la manera que estás pensando.

Digamos que tengo:

¿Cómo puedo orientar los elementos que tienen 'data-foo' en el nombre del atributo?

No creo que pueda orientar los nombres de los atributos de la misma manera que los valores de los atributos. Sin embargo, puede usar .filter() para hacerlo de manera un tanto eficiente:

 $('div').filter(function() { for (var property in $(this).data()) { if (property.indexOf('fooBar') == 0) { return true; } } return false; });​ 

Tenga en cuenta que data-foo-bar se ha convertido a fooBar .

Demostración: http://jsfiddle.net/Tyj49/3/

No estoy seguro de que puedas hacer eso. He echado un vistazo a la API y parece que solo puedes realizar una coincidencia parcial más profunda en el valor, no el nombre del atributo en sí.

Voy a darte el consejo potencialmente frustrante de “no hagas esto”. 😉 En esencia, lo que buscas es un montón de divs que coincidan con una categoría más general. No solo data-foo-bar s, sino TODOS data-foo s de data-foo ! ¿Por qué no simplemente le das a todos los datos-foos un nombre de clase que puedes seleccionar, o un atributo separado como data-foo="true" ?

En otras palabras, en lugar de limitarme estrictamente a la pregunta formulada, me gustaría saber cuál es el caso de uso para que tal vez un movimiento lateral en el pensamiento pueda resolver tu problema con la misma eficacia. Muchas formas de despellejar a un gato y todo eso.

Esta es solo una solución alternativa. Si puede asegurarse de que el nombre del atributo que está buscando no está presente en el texto del elemento , lo que podría hacer es obtener el valor outerHtml del elemento y luego hacer una búsqueda de subcadena:

 $("elementsToCheck").each(function () { var elemHtml = $('
').append($(this).clone()).html(); //clone to get the outerHTML if (elemHtml.indexOf("attributeName") >= 0) { // current element contains the attribute with name "attributeName" } });

Espero que esto ayude.

Prueba esto

 $().ready(function() { var test=$('#div_test').data("foo-bar"); alert(test); }); 

HTML:

 

Utilice .data() para obtener todos los atributos de datos de un elemento, y luego use .filter para obtener los elementos que tienen atributos de data-validation* .

 var validated_elements = $("p").filter(function() { var found = false; $.each($(this).data(function(key) { if (key.match(/^data-validation/)) { found = true; return false; } } return found; }); 

Pruebe algo como esto

 var element = $('div[data-foo-bar=hello]')​;