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.

Hi,
Thanks for taking interest in my getElementsByClassName function! I’ve updated my post because Internet Explorer caused some errors. It no longer supports Internet Explorer which is a problem I hope to fix later on.
http://www.1true.co.uk/2007/05/28/the-utimate-ultimate-getelementsbyclassname-function/ ;)

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.


Cerrar
Enviar por Correo