2009-04-24 9 views
2

Espérons que ce code simple basé sur jquery aidera à expliquer le problème.Nettoyer javascript variable scope en supprimant son code de DOM

html:

<script> 
    $('#remover').click(function(){ 
    $('#block').empty(); 
    }) 
    $('#test').click(function(){ 
    alert(remove1); // still displays the varibale 
    }) 
</script> 
<div id="block"> 
<script> 
    var remove1 = 'asasdsds'; 
    var remove2 = 'asasdsds'; 
    var remove3 = 'assdsdsdas';   
    var blabla = 'blablabl'; 
</script> 
</div> 

<span id="remover">Remove ALL</span> 
<span id="test">Test</span> // it will still displays the variable. 

J'ai besoin pour effacer toutes les variables de portée globale en supprimant le contenu du bloc. Le contenu du bloc est dynamique et peut contenir n'importe quel code javascript.

Merci d'avoir lu.

Répondre

7

Cela ne fonctionnera certainement pas comme prévu. Le tas Javascript n'est pas couplé au DOM - une fois que les scripts ont été exécutés, et que le tas a été muté, vous ne pouvez pas les "supprimer" en supprimant le code source associé.

Les variables globales sont généralement définies sur l'objet window, donc si vous connaissez les noms, vous pouvez les supprimer à partir de là. Si vous voulez annuler les effets de n'importe quel JavaScript dans le bloc, vous n'avez pas vraiment de chance.

+0

Je l'ai eu. Je vais essayer d'autres façons alors. Merci pour votre information! – taras

+0

var déclarations ajouteront des propriétés à l'objet de la portée (dans

4

Javascript ne fonctionne pas de cette façon! Une fois qu'un bloc de script est analysé, le retirer du DOM ne fera rien ... La seule chose que je peux penser est vraiment bidouille horrible comme ceci:

<script> 
var blockKeys = []; 
var oldKeys = {}; 
for (var i in window) 
    oldKeys[i] = true; 
</script> 
<div id="block"> 
<script> 
    var remove1 = 'asasdsds'; 
    var remove2 = 'asasdsds'; 
    var remove3 = 'assdsdsdas';   
    var blabla = 'blablabl'; 
</script> 
</div> 
<script> 
for (var i in window) 
{ 
    if (!oldKeys[i]) 
     blockKeys.push(i); 
} 
alert(remove1); 
</script> 

Ensuite, votre fonction supprimer ressemble :

<script> 
function remove() 
{ 
    for(var i = 0; i < blockKeys.length; i++) 
     eval(blockKeys[i] + ' = null'); 
} 
</script> 
+0

Merci pour votre code Greg! – taras

Questions connexes