2013-06-18 4 views
3

Ok vous avez un ensemble de variables:Convertir une chaîne en un nom de variable en javascript?

var height1 = 10 
var height2 = 20 
... 
var height7 = 70; 

L'utilisateur a donné entrée et vous avez besoin pour obtenir la valeur d'une de ces variables, voici le code pour que:

if(window.location.hash) { 
     var hash = window.location.hash.substring(1); 
      var option_name = $('a[name=' + hash + ']').closest('[id^="option"]').attr("id"); 
      var hash_div_height_id = "height" + option_name.substring(6); 
      $('a[name=' + hash + ']').closest('[id^="option"]').show(); 
      $('a[name=' + hash + ']').closest('[id^="option"]').height(hash_div_height_id); 
    } else { 
     // No hash found 
    } 

Mon problème étant maintenant que je ne peux pas passer "hash_div_height_id" (qui représenterait actuellement la chaîne "height1" ou "height2" ou n'importe quel nombre que jQuery a renvoyé à ajouter à la fin de la chaîne) à la fonction height car c'est une chaîne.

Alors, comment puis-je faire? Puis-je convertir en quelque sorte la chaîne "height1" pour représenter la variable height1 qui a été établie plus tôt?

+2

Je pense que vous voulez [notation de support] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Member_Operators#Bracket_notation). Je vais voir si je peux trouver un bon doublon. – apsillers

+0

Je dirais utiliser 'eval', mais je sais que je serais castré;) – krishgopinath

+0

Dupliquer de [Accéder à la valeur de la variable JavaScript par son nom?] (Http://stackoverflow.com/questions/4399794/access-value -de-javascript-variable-par-nom) et [nom de variable dynamique Javascript] (http://stackoverflow.com/questions/5117127/javascript-dynamic-variable-name) – apsillers

Répondre

5

Attribuer la hauteur est que les propriétés d'un objet.

Quelque chose comme ..

var heightObj = { 
     height1 : 10, 
     height2 : 20, 
     height7 : 70 
    }; 

var hash_div_height_id = "height" + option_name.substring(6); 

Pour accéder à la propriété particulière, utilisez le [] notation pour accéder à la propriété

var newHeight = heightObj[hash_div_height_id]; 
$('a[name=' + hash + ']').closest('[id^="option"]').height(newHeight); 
+0

Cela a fonctionné à merveille! Merci beaucoup @Sushanth! Je voulais vraiment faire ce travail sans utiliser eval, j'apprécie la perspicacité. – javArc

+0

@javArc .. Heureux d'avoir aidé :) –

2

En supposant que les variables sont déclarées dans le contexte global, vous pouvez simplement faire window[hash]

Ce parce que toute variable que vous déclarez une portée globale est jointe en prpoerty à window (en supposant que le code est exécuté dans un navigateur). et vous pouvez obtenir la valeur de toute propriété, soit par la notation par points

window.height1

ou par l'indexation en utilisant le nom de la propriété comme la clé. C'est

window["height1"] 

et puisque vous pouvez passer une variable contenant la clé que vous pouvez simplement faire

var hash = "height1"; //replace with the code you already have 
var height = window[hash]; 
+0

Merci pour la perspicacité sur le fonctionnement de «fenêtre», je suis encore relativement nouveau à ce sujet. – javArc

+0

@javArc nous étions tous à un certain point –

0

Avez-vous un contrôle sur les variables comme un tableau de les hauteurs vous conviendraient beaucoup mieux, à défaut, créez le tableau vous-même afin que vous preniez la taille 1..X les pousser sur un tableau et ensuite vous pouvez simplement utiliser l'index.

Questions connexes