Re: # а вы говорите индусы...
От: Legon  
Дата: 12.05.10 07:18
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>Дано: толковый паренек, только что закончивший вуз и неплохо разбирающиеся в ассемблере, плюсах, скриптовых языках и всякой прочей околбасице. энергичный, обучаемый. Но ленивый до ужаса...


М>Задание: написать на JavaScript функцию, которая принимает на грудь HTML, находит Java Script'ы (грубо говоря, все что между script и /script), собирает их в кучу и делает eval(). Постановка задачи исходила от манагера, который до того никогда скрипты не курил, жабу не знал, но за часик с небольшим лазанья по иннету накорябал довольно шустро работающий скрипт (обрабатывающий 90% ситуаций), а так же набросал несколько тестовых примеров для его проверки. Скрипт был послан не в качестве образца для подражания, а скорее как разверзнутое ТЗ, чтобы не писать много слов на бумаге.


М>Исходный магеровский скрипт. Тупой до безобразия:



М>
М>function grab_js(html)
М>{ 
М>    // html = unescape(html);

М>    var js = ""; var x = 0; var y = 0; var z = 0;
    
М>    for(;;)
М>    { 
М>        x = html.search(/<script/i); if (x == -1) break;
М>        y = html.substring(x).search(/>/); if (y == -1) break;
М>        z = html.substring(x + y).search(/<\/script *>/i); // might be eol as well
М>        if (z == -1) break; // z = len of substring(x+y)
М>        // grab js
М>        js = js + html.substring(x + y + 1, x + y + z) + ";";
М>        // grab next js
М>        html = html.substring(x + y + z + 1);
М>    }
М>    return js;
М>}
М>


Если можно использовать сторонние библиотеки, то вся эта задача в jQuery занимает 30-60 секунд и пара строчек кода. Ниже код для примера.

1) $('script').each(funcion() { eval('"' +$(this).html() + '"'); })


2) var inner = ''
$('script').each(funcion() { inner = inner + $(this).html() + ';'); })
eval(inner)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.