Getelementsbyreg

Description

suite à un débat sur un autre site, je vous propose un sélécteur d'élément HTML, basé sur des expréssions régulière.
La fonction est très simple d'utilisation.

document.getElementsByReg(/rub/,'id','li');
1er argument, le sélécteur css,
2eme, le nom de l'attribut à tester,
enfin en option le nom du tag , le type de l'élément

merci à SpaceFrog, qui vous reconnaitrais , j'en suis sur !!
bye

Source / Exemple :


<script type="text/javascript">
document.getElementsByReg=function(){
    //constante et méthode privé
    //groupe ed prop spécifique pas accessible via getattribute et syntaxe particuliere,...si ie
    var camelGroupe = ['colSpan', 'rowSpan', 'vAlign', 'dateTime', 'accessKey', 'tabIndex', 'encType', 'maxLength', 'readOnly', 'longDesc', 'cellPadding', 'cellSpacing', 'frameBorder', 'useMap'],
        isIE = /msie/i.test(navigator.userAgent);
    //contruit un objet d'acces rapide au propriété spécifique     
    for(var i = 0, c, isCamel = {'class' : 'className', 'className' : 'className', id : 'id'}; c = camelGroupe[i]; i++)
        isCamel[c.toLowerCase()] = c;
    //récupere la valeur via getAttribute    
    function _get(el, attr){
        return el.getAttribute(attr)
    }
    //récupere la valeur via propriété du noeud (tjrs accessible avec ie)
    function _getCamel(el, attr){
        return el[attr]
    }     
    //rourne la fonction publique    
    return function(reg, attr, tag){
        var tab=[];
        if(!(reg instanceof RegExp))
            return	tab;
        //définit la fonction a utilser pour récupérer l'attribut, redéfinit l'attribut si spécifique
        var camel, 
            get = (camel = isCamel[attr]) || isIE ? _getCamel : _get;
        attr = camel || attr; 
        for(var i=-1, els = document.body.getElementsByTagName(tag || '*'), el; el = els[++i];){
            if(reg.test(get(el,attr)))
	            tab[tab.length] = el;//plus rapide qu'un push
        }
        return tab;  
    }
}();
</script>
 
 
 
<title>Nouvelle page 1</title>
</head>
 
<body onload="alert(document.getElementsByReg(/rub/,'id','li').length);alert(document.getElementsByReg(/^blo/,'class','li').length);" />
<ul>
	<li class='blabla' id="rub1" >rubrique1</li>
	<li  class='bloblo' id="menu1" >menu1</li>
	<li  class='blabla' id="menu2" >menu2</li>
	<li class='bloblo' id="rub2" >rubrique2</li>
	<li  class='blabla' id="menu3" >menu3</li>
	<li class='bloblo' id="menu4" >menu4</li>
	<li  class='blabla' id="rub3" >rubrique1</li>
	<li class='bloblo' id="menu5">menu5</li>
</ul>			
</div>
</body>
</html>

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.