Js nom variable fin inconnue

Fermé
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 - Modifié par necro27 le 10/02/2011 à 14:50
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 - 11 févr. 2011 à 19:02
Bonjour,

Je ne trouve pas de documentation du tout...

Savez vous comment faire en js pour pouvoir effectuer une action sur un contrôle dont le nom n'est connu que par le début.

Je m'explique :

via cette ligne

document.getElementById('nomvariable'*).disabled=true

Ici je voudrai donc rendre inaccessible tous les objets dont l'id commence par 'nomvariable' et qui possède un nombre de caractères inconnu à la suite.

Plutôt que de faire cela :
document.getElementById('nomvariable1').disabled=true
document.getElementById('nomvariable2').disabled=true
document.getElementById('nomvariable3').disabled=true
document.getElementById('nomvariable4').disabled=true
document.getElementById('nomvariable5').disabled=true
....

Merci d'avance.

Necro27

6 réponses

Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
10 févr. 2011 à 21:46
Tes contrôles sont de quel type ?

Tu peux tenter un truc dans ce goût-là :
var list = tonFormulaire.getElementsByTagName('input');
for (var i = 0; i < list.length; i++) {
    var control = list[i];
    if (control.id && control.id.indexOf('nomvariable') > -1) {
        control.disabled = true;
    }
}

À répéter, le cas échéant, pour les <textarea> et <select> ;)
2
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
10 févr. 2011 à 15:27
Salut,
il n'y a rien en JS qui permet de faire une sélection « avec joker ». Il faudrait que tu t'appuies sur ce que tu sais de la page pour récupérer une liste de contôles la plus petite possible. Ensuite tu pourras parcourir cette liste et regarder les id de chaque contrôle, et utiliser indexOf ou substring dans un bloc if.
0
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 8
Modifié par necro27 le 10/02/2011 à 15:37
hummm comment dire....flûte !

bonjour Groarh,

Tout d'abord merci pour la réponse, ensuite...j'aime pas la réponse ^^' enfin la pas la valeur de la réponse, mais le coté mauvaise nouvelle.

Le souci est que mes noms sont très dynamiques, et je ne peux rester sur quelque chose de fixe. Et donc la restriction au sens où je la comprend est impossible.

je me penche sur l'indexof, et substring que j'avoue ne connaitre que de vue.
Merci.

Necro27
0
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 8
11 févr. 2011 à 09:11
Bonjour, bonjour :)

C'est bon j'ai trouvé réponse à mon problème. En fait j'avais posté ma question sur un second forum et il s'avère que sur ce dernier une réponse avait déjà plus ou moins été formulée auparavant. Donc une fois ma question posé, on m'a dirigé sur ce code.

Mais cela se rapproche grandement avec ce que tu proposes.

Je met ci-dessous le code qu'il m'a été transmis, que j'ai retravaillé par la suite.

<script type="text/javascript">
 
document.getElementsByReg=function(reg,attr){
var tabReg=new Array();
var tabElts=document.body.getElementsByTagName('*');
var TEL=tabElts.length;
if(! (reg instanceof RegExp)){return tabReg;}
i=0;
while(tabElts[i]){
		if(tabElts[i][attr]){
	         if(reg.test(tabElts[i][attr])){tabReg.push(tabElts[i]);}
	         }
	i++;         
	}
return tabReg;
}
 
function foo(){
 
var tabdiv=document.getElementsByReg(/^mondiv/,'id');
var liste="";
var i=-1;
while(tabdiv[++i]){
liste+="le div "+tabdiv[i].id+" contient =>"+tabdiv[i].innerHTML +"\n";
}
alert(liste);
}
</script>
 
 
</head>
 
<body onload="foo()">
<div id="_3">
<div id="mondiv1">truc contenu dans mondiv 1 </div>
<div id="mondiv2">truc contenu dans mondiv 2</div>
<div id="madiv3">truc contenu dans ma div3</div>
<div id="madiva">truc contenu dans madiva</div>
<div id="mandiv5">truc contenu dans mandiv5</div>
<div id="mondivb">truc contenu dans mondivb</div>
</div>
 
</body>


Très bonne journée à toi, sincèrement, et merci d'avoir répondu présent à mon problème.

Necro27
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
11 févr. 2011 à 13:58
Waow, faut être le fils à personne pour conseiller à quelqu'un d'utiliser getElementsByTagName('*'). Ça récupère tous les éléments de la page... Moins optimisé, tu meurs !
0
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 8
11 févr. 2011 à 15:20
Oui tous les éléments de la page commençant par la valeur de reg dans la fonction document.getElementsByReg=function(reg,attr).


Donc ici je ne récupère que les id des contrôles commençant par la valeur que je donne (pour attr = 'id')

Donc en gros

document.getElementsByReg(/^mondiv/,'id');

Pour récupérer la liste de tous les contrôles dont l'id commence par mondiv

Bon après je ne sais pas trop, je n'ai pas créé moi même la fonction, mais je pense que l'optimisation est mieux que nulle puisqu'il me semble que cette fonction tri les éléments qu'elle récupère..non ?

Après je suis trop novice sur le coté optimisation, donc je suppose tu dois sûrement avoir raison ^^"

Mais bon ça fonctionne et mon application reste une application en local, (intranet) donc pas les soucis d'internet....

Bonne journée ;)

ps : pour info l'auteur de cette fonction, où du moins celui qui me l'a proposé, est SpaceFrog du forum Developpez.com
Peut être connu, peut être pas...

Pour info la discussion sur laquelle il m'a redirigé
https://www.developpez.net/forums/d759796/webmasters-developpement-web/general-conception-web/contribuez/src-getelement-s-byid-filtre-regexp/

Voilà, bonne journée ^^

Necro27
0
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
11 févr. 2011 à 19:02
Yep, tu n'as juste pas suivi la discussion jusqu'au bout (elle s'étale sur plus d'un mois !). Les membres de developpez.com ont généralement à coeur d'optimiser leurs scripts, et des versions plus efficaces du script que tu as trouvé ont été proposées après...

Pour info il est vivement recommandé d'utiliser la fonction de sélectione la plus adaptée possible, parmi toutes celles proposées par les navigateurs :

- getElementById
- getElementsByTagName (sous IE6, ne marche que sur <body>)
- getElementsByName (obsolète)
- getElementsByClassName (récente donc pas implémentée partout)
- etc.

Il faut faire confiance aux routines proposées par les navigateurs, qui sont susceptibles d'optimiser toujours plus leurs algorithmes internes. Si on utilise correctement ces fonctions, notre script s'améliore tout seul à mesure que les navigateurs évoluent.

Dans le cas présent, la fonction getElementsByTagName est appellée sur body (à peu de chose près, la page toute entière) avec le paramètre spécial *, ce qui génère en variable locale la liste de toutes les balises de la page. La simple création de cette liste peut déjà être assez coûteuse, et je ne parle pas des diverses opérations effectuées dessus par la suite.

Un getElementsByTagName avec un tagname particulier est déjà beaucoup plus efficace, et si en plus il y a moyen de l'appeler sur autre chose que le <body>, ça réduit d'autant le champ de possibilités.

;)
0