validar validacion obtener lista formularios formulario enviar ejemplos con atributos atributo antes javascript html5 mootools css-selectors

javascript - validacion - ¿Hay alguna manera de buscar atributos que comiencen con cierta cadena en HTML?



validar formulario javascript html5 (4)

Puede aproximarse a algo así repitiendo los atributos de cada elemento en el contenedor y viendo si el nombre del atributo coincide con una expresión regular para lo que está buscando:

Por ejemplo, en este jsFiddle, estoy buscando elementos li con las propiedades data-media-tv y data-media-dvd .

Puede adaptar la expresión regular para devolver solo lo que desea ver. ¿Desea solo ver los elementos que tienen un data-media- * (como en su pregunta)? Aquí tienes .

Tenga en cuenta que esto no es exactamente escalable . Debido a que estamos iterando a través de cada elemento en la página, y comprobando cada atributo individual (pero regresando temprano si se encuentra), esto puede y probablemente será lento para páginas grandes.

¡Limita esto SOLAMENTE al contenedor que deseas buscar, o solo a los elementos que deseas iterar! Si ejecuta esto en document.body , se repetirá en cada elemento de la página, no seré responsable si su casa se incendia como resultado. :)

Aquí está funcionalizado:

function attrMatch(elements, regexp) { // Iterate through all passed-in elements, return matches var matches = elements.filter(function(li) { var numAttr = li.attributes.length; for(x=0;x<numAttr;x++) { var attr = li.attributes[x]; return attr[''name''].test(regexp); } }); return matches; };

En elements , solo pase los elementos que desea verificar, posiblemente seleccionados mediante $$ . Si desea verificar todos los elementos en un elemento contenedor, reemplace elements con container y container.getChildren() en cada instancia de element , arriba.

¿Hay alguna forma de encontrar todos los elementos con atributos que comiencen con una cadena en particular?

Estoy usando el framework Mootools y esto es lo que he intentado:

$$(''*[data-media-*]'');

Pero solo muestra todos los elementos en la página.

Entonces, ¿hay alguna forma de obtener todos los elementos en la página que tengan atributos que comiencen con, data-media- ?


$$(''div[attrName="attrnameValue"]'').each(function() { // `this` is the div });


pruebe este jsfiddle solo conozca el índice / posición (común) del atributo data-media-* y utilícelo en el código correspondiente.


puede filtrar los elementos que ya tiene para devolver los que tengan los atributos correspondientes data- *.

Elements.implement({ filterData: function(substring){ return this.filter(function(element){ var attribs = element.attributes, len, ii = 0; for (len = attribs.length; ii < len; ++ii) { if (attribs[ii].name.indexOf(''data-'') === 0 && attribs[ii].name.indexOf(substring) !== -1) { return true; } } }); } }); console.log($$("div").filterData(''foo'')); console.log($$("div").filterData(''bar'')); console.log($$("div").filterData(''oba''));

en acción: http://jsfiddle.net/dimitar/pgZDw/

desventaja: ya debe pasarlo en una colección de elementos que tengan sentido, ej. div.foo o #someid *

una solución más elegante sería agregar un pseudo :data() a Slick:

(function(){ // cache reusable string var data = ''data'', hyphen = ''-'', // set the fallback via XMLSerializer, if no outerHTML (eg. FF 2 - 10) XS = this.XMLSerializer && new XMLSerializer(); Slick.definePseudo(data, function(value){ return (this.outerHTML || XS.serializeToString(this)).test([data, value].join(hyphen)); }); }()); console.log($$("div:data(foo)")); console.log($$(":data(media-)"));

ejemplo actualizado: http://jsfiddle.net/dimitar/pgZDw/3/