getElementsByTagName("script")
Этот код прекрасно работает во всех браузерах, кроме ... .
function ajaxLoad(url, target) { ajaxGet(url, function(content) { var container = document.getElementById(target); container.innerHTML = content; var scripts = container.getElementsByTagName("script"); // IE < 9 не работает for (var i = 0; i < scripts.length; ++i) { eval(scripts[i].innerHTML); } }); } Ишак возвращает Object HTMLCollection с length = 0. Может кто подскажет как исправить? И ещё вопрос пробовал с помощью регулярок получить всё что внутри тегов script вот рабочая регулярка(она должна работать, потому как правильная) /<script[^>]*>(.*)<\/script>/gi, что мне непонятно в js есть re.exec(str), но данный метод возвращает только первое вхождение, в цикле тоже не получается, покажите рабочий пример |
bugmenot,
подная тема |
там нет ответа на мой вопрос, с регуляркой помочь можешь?
|
Это я так пробовал с помощью регулярок выцепить скрипты, но не работает
// ... var str = content; // alert(str); while (1) { alert(str); var tmp = /<script[^>]*>(.*)<\/script>/gi.exec(str); alert(tmp); if (!tmp) { break; } str = str.replace(tmp[0], ""); } Объясните кто-нибудь в этом ***баном js как оно делается! |
<html> <head> <script>//скрипт</script> <script>//скрипт</script> <script>// ещё скрипт))</script> <script>// и ещё скрипт</script> <script>alert(document.getElementsByTagName("script").length);//узнаем, сколько их))</script> </head> </html> Это у вас мозги не работают, по-видимому. Во-первых, в моём восьмом эксплорере всё прекрасно работает, во-вторых, вы второго августа тоже на улице "ВДВ - гавно!" кричите? Нет? А почему здесь плохо про js говорите? Вы какбэ обижаете людей, которые на нём пишут. |
Цитата:
|
Да я тоже не плачу от этого :) Просто это глупо - просить помощи, и при этом оскорблять людей, пусть даже косвенно, у которых помощи просишь.
|
function makeArray( obj, undefined ) { if ( !obj ) return []; var out = [], i = 0, j = 0; if ( typeof obj.length === "number" ) { for ( var l = obj.length; j < l; j++ ) { out[ i++ ] = obj[ j ]; } } else { while ( obj[ j ] !== undefined ) { out[ i++ ] = obj[ j++ ]; } } out.length = i; return out; } function ajaxLoad(url, target) { ajaxGet(url, function(content) { var container = document.getElementById(target); container.innerHTML = content; var scripts = makeArray( container.getElementsByTagName("script") ); for (var i = 0; i < scripts.length; ++i) { eval(scripts[i].innerHTML); } }); } |
Цитата:
str = str.replace(tmp[ 1 ], ""); |
оно у меня не в хиде лежит, аяксом берется контент страницы, контент вставляется в див, а у дива выбираются элементы по тегу
|
в тмп 1 лежит найденная строка
|
> devote
нет, не работает, но всё равно спасибо > trikadin сам ты ебанный ублюдок, нервы лечи еблан |
Цитата:
|
Цитата:
|
Вот простой пример
Цитата:
<div id="test"> </div> <script type="text/javascript"> var data = "<scr" + "ipt type=\"text/javascript\">alert(\"It's works.\");</scr" + "ipt><h1>It's works.</h1>"; var container = document.getElementById("test"); container.innerHTML = data; alert(container.getElementsByTagName("script")[0].innerHTML); </script> В Опере работает в ишаке object is null or not an object |
что в container.getElementsByTagName("script")[i].innerHTML должно eval'иться, так вот как писал выше не работает только в ишаке
|
Кому интересно в этом петушином языке это делается так:
function ajaxLoad(url, target) { ajaxGet(url, function(data) { // здесь в элемент с id = target помещаем контент, получаемый аяксом // код между тегами script выполнен не будет document.getElementById(target).innerHTML = data; // поэтому мы его выполняем с помощью ф-ии eval eval(getJsCode(data)); }); } function getJsCode(data) { data = data.split(/<\/script>/gi); var i = 0, tmp = []; while (i < data.length) { var x = data[i++].split(/<script[^>]*>/gi); if (x[1]) { tmp.push(x[1]); } } return tmp.join(); } |
Мне вот только интересно, а как ещё это можно было сделать и как всё таки в js реализуется ф-ия аналогичная php-ной preg_match_all
|
Часовой пояс GMT +3, время: 10:52. |