J’ai besoin de créer dynamicment des variables dans une boucle, mais je ne sais pas comment. J’ai lu sur l’utilisation de eval();
mais tout ce que j’ai trouvé, c’est qu’il s’agit de changer dynamicment la valeur à l’intérieur de la variable.
J’ai besoin de quelque chose comme ça:
$(e).find('unidadeid').each(function () { countUnidades++; var Unidade[value inside countUnidades here] = $(this).text(); });
Soyez clair sur vos pas, s’il vous plaît. Je ne demande pas une solution, mais une aide, un apprentissage. Je vous remercie 😉
Vous avez deux options:
Utilisez un tableau:
var unidades = []; $(e).find('unidadeid').each(function () { unidades.push($(this).text()); });
ou
var unidades = $(e).find('unidadeid').map(function () { return $(this).text(); }).get();
Si vous voulez vraiment avoir des noms qui ne sont pas que des chiffres, utilisez un object et une notation entre crochets:
var unidades = {}, countUnidades = 0; $(e).find('unidadeid').each(function () { countUnidades++ unidades['Unidade' + countUnidades] = $(this).text(); });
Cela crée un object, unidades
, avec des propriétés telles que Unidade0
, Unidade1
, etc. Notez que each
reçoit un index, vous n’avez donc pas besoin de countUnidades
sauf si vous le souhaitez pour autre chose:
var unidades = {}; $(e).find('unidadeid').each(function (index) { unidades['Unidade' + index] = $(this).text(); });
Vous pouvez toujours utiliser array:
var Unidade = [], countUnidades = 0; $(e).find("unidadeid").each(function(i) { Unidade[countUnidades++] = $(this).text(); // ... or Unidade.push($(this).text()); // ... or Unidade[i] = $(this).text(); });
N’oubliez pas que les éléments DOM doivent toujours avoir des identifiants uniques . Par conséquent, each
itération n’est pas requirejse ici, si unidadeid
fait référence à l’identifiant d’un élément.
Votre exemple ajoute simplement à ce que je suppose est un tableau avec des valeurs incrémentielles. Unidade ressemblerait à ceci dans JSON:
[ 0: "text0", 1: "text1", 2: "text2" ]
Mais si vous souhaitez append ceci à un object, il vous suffira de parcourir un tableau de chaînes où le tableau a la même longueur que votre liste d’éléments. En fait, vous souhaiterez peut-être attacher cette valeur à un atsortingbut de données où la valeur est le nom de la variable et le texte le contenu de l’élément. Donc, le HTML serait quelque chose comme ça:
Text1 Text2 Text3
Aurait besoin de ce JS:
var unidade = {}; $("div").find('unidadeid').each(function() { unidade[$(this).data('var')] = $(this).text(); }); console.log(unidade);
Et l’object ressemblerait à ceci:
{ "a": "Text1", "b": "Text2", "c": "Text3" }
Je doute que vous ayez besoin de créer des variables de manière dynamic. C’est très rarement utile.
Vous voulez probablement en savoir plus sur les structures de données; en particulier je pense que vous voulez juste un tableau:
var unidades = []; // declare the array outside the loop $(e).find('unidadeid').each(function () { countUnidades++; unidades[countUnidades] = $(this).text(); });
Et maintenant vous avez un tableau, unidades
dont les valeurs sont les contenus text()
de vos éléments.
Je ne sais pas si vous voulez find('unidadeid')
– c’est-à-dire trouver tous les éléments
, ce qui n’est pas un élément HTML, mais vous
peut-être du code XML personnalisé ou un exemple.
Eh bien, juste pour être complet, voici exactement ce que vous avez demandé, bien que ce soit une idée terrible:
$(e).find('unidadeid').each(function () { countUnidades++; var t = $(this).text(); eval('Unidade' + countUnidades + ' = t;'); });
Remarque:
eval
est difficile à utiliser sans ouvrir des failles de sécurité. eval
est lent. Normalement, vous utiliseriez un tableau à la place:
var Unidade = []; $(e).find('unidadeid').each(function () { Unidade.push($(this).text()); });