Очистка области видимости переменной javascript путем удаления ее кода из DOM - PullRequest
2 голосов
/ 24 апреля 2009

Надеюсь, этот простой код на основе jquery поможет объяснить проблему.

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.

Мне нужно удалить все переменные из глобальной области, удалив содержимое блока. Содержимое блока является динамическим и может содержать любой код JavaScript.

Спасибо за чтение.

Ответы [ 2 ]

7 голосов
/ 24 апреля 2009

Это, конечно, не сработает, как вы ожидаете. Куча JavaScript не связана с DOM - после того, как скрипты были выполнены и мутировали в кучу, вы не можете «выполнить» их, удалив связанный с ними исходный код.

Глобальные переменные обычно устанавливаются в объекте окна, поэтому, если вы знаете имена, вы можете удалить их оттуда. Если вы хотите отменить эффекты любого JavaScript внутри блока, вам в значительной степени не повезло.

4 голосов
/ 24 апреля 2009

Javascript не работает таким образом! После синтаксического анализа блока скрипта удаление его из DOM ничего не даст ... Единственное, о чем я могу думать, это действительно ужасный хак , подобный этому:

<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>

Тогда ваша функция удаления выглядит так:

<script>
function remove()
{
    for(var i = 0; i < blockKeys.length; i++)
        eval(blockKeys[i] + ' = null');
}
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...