No existe un método nativo de javascript que nos permita seleccionar de forma natural una serie de elementos con un atributo arbitrario predeterminado. El método getElementById() nos permite seleccionar un único elemento dado su 'id' o getElementsByTagName() nos devuelve un array con todos los elementos que compartan una misma etiqueta. Sin embargo, no existe un método del tipo getElementsByLang() que permita escoger, por ejemplo, todos los elementos con el atributo 'lang' igual a 'es'.
La siguiente función, que resulta de una generalización de la función getElementByClass que podemos encontrar en http://www.dustindiaz.com/getelementsbyclass/, nos permite llenar ese hueco con la ventaja adicional de que podemos utilizar atributos no definidos en la especificación de HTML 4.0 (por qué esto puede ser de algun interés lo dejamos para otro artículo ;-) :
function getElementsByAttribute(atributo,nombre,nodo,etiqueta) { //Este es el array que va almacenando los resultados var resultados = new Array(); //Si los argumentos nodo y etiqueta están vacios les damos valores por defecto if ( nodo == null ) nodo = document; if ( etiqueta == null ) etiqueta = '*'; var elementos = nodo.getElementsByTagName(etiqueta); var longitud = elementos.length; //Construimos la expresión regular que deseamos encontrar var cadena = new RegExp("(\b)"+nombre+"(\b)"); //Recorremos los elementos que deseamos parsear for (i = 0, j = 0; i < longitud; i++) { if ( cadena.test(elementos[i][atributo]) ) { resultados[j] = elementos[i]; j++; } } //devolvemos el array de resultados return resultados; }
Si deseáramos ahora escoger todos los elementos con el atributo lang="es" sólo necesitamos llamar a getElementsByAttribute('lang', 'es'). En este enlace podéis observar esta función en acción.