Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.07.2009, 20:35
Интересующийся
Отправить личное сообщение для Diem Посмотреть профиль Найти все сообщения от Diem
 
Регистрация: 24.07.2009
Сообщений: 15

evalScripts без regexp и eval
Есть ли какой нибудь природный способ выполнить js скрипты при обновлении содержимого DOM элемента.

Если я не ошибаюсь во всех фрэймворках для этих целей используют Regexp + eval

Вот такой пример:
<div id="div">
    DIV
</div>


<script>
    function test1() {
        var divNode = document.getElementById('div');
        var newNode = divNode.cloneNode(false);
        newNode.innerHTML = 'TEST1<script>alert("ok")<\/script>'
        divNode.parentNode.replaceChild(newNode, divNode);
    }
    
    function test2() {
        var divNode = document.getElementById('div');
        divNode.innerHTML = 'TEST2';
        
        var scriptNode = document.createElement('script');
        scriptNode.innerHTML = 'alert("ok")';
        
        divNode.appendChild(scriptNode);
    }
    
    function test3() {
        var divNode = document.getElementById('div');
        divNode.innerHTML = 'TEST3<script>alert("ok")<\/script>';
    }
</script>

<a href="" onclick="test1(); return false">Test1</a>
<a href="" onclick="test2(); return false">Test2</a>
<a href="" onclick="test3(); return false">Test3</a>


test1 и test2 работают в FF
test2 работает в Opera
В IE ничего не работает, test2 - выдаёт ошибку

У кого какие мысли на счёт того, чтоб реализовать что то подобное с test1 или test3, чтобы к примеру делать update элемента ajax-ом c выполнением скриптов содержащихся в входном html ?
Ответить с цитированием
  #2 (permalink)  
Старый 30.07.2009, 16:34
Аспирант
Отправить личное сообщение для Pattern Посмотреть профиль Найти все сообщения от Pattern
 
Регистрация: 13.05.2009
Сообщений: 37

вот тебе затравка для брожения
function getJSONData(){
	eval('var r='+arguments[0]+';');
	return r||null;
}
function test4(){
	var objStr="{c:'new data into div',f:function(){alert('updated!');}}";
	var j=getJSONData(objStr||null)||null;
	if(j){
		if(j.c)
			document.getElementById('div').innerHTML=j.c;
		if(j.f)
			j.f();
	}
}

работает в FF3.5 && IE8, в остальных не проверял
ЗЫЖ в любом случае, я бы не советовал тебе передавать скрипты в тело какого либо элемента, лучше вызывать уже готовые функции.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает eval в IE ..::Silence::.. Общие вопросы Javascript 8 25.03.2009 12:16
мааленький вопрос по Regexp:) mirniy Общие вопросы Javascript 1 22.01.2009 19:47
RegExp & Mozilla (быстродействие) tau Общие вопросы Javascript 9 24.11.2008 15:35
Roll-up menu Tanya Общие вопросы Javascript 5 29.08.2008 16:28
RegExp и unicode Yury900 Общие вопросы Javascript 7 12.05.2008 23:19