getElementsByAnything le rêve du développeur

Qui n'a jamais eu besoin de récupérer les listes des objets qui ont la même classe CSS ou la liste des objets qui on le même name ? Cette fonction conçut par Matthew Pennell répond parfaitement à tout ceci.

Code

javascript
getElementsByAnything = function () {
		var elements = new Array();
		for (var i=0,len=arguments.length;i<len;i++) {
			var element = arguments[i];
			if (typeof element == 'string') {
				var matched = document.getElementById(element);
				if (matched) {
					elements.push(matched);
				} else {
					var allels = (document.all) ? document.all : document.getElementsByTagName('*');
					var regexp = new RegExp('(^| )'+element+'( |$)');
					for (var i=0,len=allels.length;i<len;i++) if (regexp.test(allels[i].className)) elements.push(allels[i]);
				}
				if (!elements.length) elements = document.getElementsByTagName(element);
				if (!elements.length) {
					elements = new Array();
					var allels = (document.all) ? document.all : document.getElementsByTagName('*');
					for (var i=0,len=allels.length;i<len;i++) if (allels[i].getAttribute(element)) elements.push(allels[i]);
				}
				if (!elements.length) {
					var allels = (document.all) ? document.all : document.getElementsByTagName('*');
					for (var i=0,len=allels.length;i<len;i++) if (allels[i].attributes) for (var j=0,lenn=allels[i].attributes.length;j<lenn;j++) if (allels[i].attributes[j].specified) if (allels[i].attributes[j].nodeValue == element) elements.push(allels[i]);
				}
				} else {
					elements.push(element);
				}
		}
		if (elements.length == 1) {
			return elements[0];
		} else {
			return elements;
		}
	}

Fonctionnement

  • La fonction va d'abord rechercher les éléments par leur id
  • Si rien n'est trouvé, la fonction va chercher les éléments qui qui ont une classe correspondante à la demande,
  • S'il n'y a toujours rien la fonction va chercher les tagName correspondant à la demande
  • Si toujours rien ne match, la fonction essaye les autres attributs (rel, name, title….)
  • Et pour finir si rien n'a été trouvé, la fonction vérifie un à un tous les attributs de tous les objets.

Si un seul objet est trouvé, la fonction renvoie l'objet lui-même. Si plusieurs objets correspondent, la fonction renvoie un tableau d'objets.

Le nombre d'argument de la fonction est illimité

Exemple

javascript
var ret = getElementsByAnything("div","maClasseCSS");


24/05/2007 09:51 -

iDo –