Contenido

Ultimate getElementsByClassName mejorada

29 may

+ 2

Hasta que los navegadores no integren getElementsByClassName como parte del core de Javascript tendremos que estar atentos a actualizaciones y versiones de esta función.

if(!document.getElementsByClassName)
{
	Object.prototype.getElementsByClassName = function(searchClasses, tag) {
		var classElements = new Array();

		tag = tag || '*';
		searchClasses = searchClasses.split(' ');
		tag = tag.split(' ');

		for(var i = 0, classLength = searchClasses.length; i < classLength; i++)
		{
			var searchClass = searchClasses[i];

			if(document.evaluate)
			{
				var result = new Array();

				for(var a = 0, tagLength = tag.length; a < tagLength; a++)
				{
					result.push(document.evaluate("//" + tag[a] + "[@class='" + searchClass + "']", this, null, XPathResult.ANY_TYPE, null));

					var element = '';
					while(element = result[a].iterateNext())
					{
						classElements.push(element);
					}
				}

			}
			else
			{
				for(var a = 0, tagLength = tag.length; a < tagLength; a++)
				{
					var els = this.getElementsByTagName(tag[a]);
					var pattern = new RegExp("(^|\s)" + searchClass + "(\s|$)");

					for(var j = 0, elsLen = els.length; j < elsLen; j++)
					{
						if(pattern.test(els[j].className))
						{
							classElements.push(els[j]);
						}
					}
				}
			}
		}

		return classElements;
	};
}

 Como podemos ver, intenta lanzar la busqueda mediante XPath en caso de que esté disponible, y si no es posible lanza la busqueda por clases mediante expresiones regulares, no implica que sea más rápida, a las estadísticas me remito, pero es completamente funcional.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.