Вставить выводы разных яваскриптов перед и после элемента
Добрый вечер.
Задача следующая: Есть страница http://js.sdelajka.com/test_min.html , где-то на ней находится элемент с классом eMessage. На ней с помощью одного подключенного js-скрипта (в моем случае m.js) нужно вывести перед элементом с классом eMessage результат скрипта hellobefore.js , а после этого элемента результат helloafter.js При этом hellobefore.js и helloafter.js у меня нет возможностей редактировать - они даются извне. Т.е. вся магия должна происходить в m.js которым я полностью управляю. Все что я натворил можно просмотреть: http://js.sdelajka.com/test_min.html http://js.sdelajka.com/m.js http://js.sdelajka.com/hellobefore.js http://js.sdelajka.com/helloafter.js По http://js.sdelajka.com/test_min.html видно что результат мы не получаем (в фаерфоксе код яваскриптов выводится в самом низу страницы, один за другим - хотя просто текст выводится там где надо. В хроме эти коды вообще не отображаются). Подскажите пожалуйста как дорешать задачу. |
Чтото Вы не так решаете
зачем там дивы создаем скрипт var sc=document.createElement('script'); sc.setAttribute('src','...before.js'); и вставляем его перед вашим злементом |
А как это вставить перед нужным элементом?
|
elem.parentNode.insertBefore(sc,elem);
|
Сделал как вы сказали - результат один в один с тем что был (в фаерфоксе код яваскриптов выводится в самом низу страницы, один за другим - хотя просто текст выводится там где надо. В хроме эти коды вообще не отображаются).
|
Цитата:
там наверху у Вас написано вывести результат скрипта-то есть текст а не сам скрипт |
kulibin, document.write выводит текст в поток, если страница не загружена, и затирает данные и выводит их на чистую страницу.
скрипт m.js подключается после загрузки страницы - значит, этого сделать низя. подключайте m.js в <head>, и тогда отловить вывод двух скриптов можно будет так : m.js var old = document.write; document.write = function(x){ alert(x) // тут перехватываем вывод делаем с ним, что хотим. }; запоминайте вывод в массиве, и потом выводите результаты в элементы после загрузки страницы.. и главное, вернуть на место document.write не забудьте. function onAvailable(before, after){ for(var element, elements = document.getElementsByTagName("div"), i = 0; i in elements && !element; i += 1){ if(elements[i].className === "eMessage"){ element = elements[i]; } } element.insertAdjacentHTML("beforeBegin", '<div>'+before+'</div>'); element.insertAdjacentHTML("afterEnd", '<div>'+after+'</div>'); }; ну вот и полный код страницы (делать мне нечего) <!-- это тут m.js --> <script> function onAvailable(before, after){ for(var element, elements = document.getElementsByTagName("div"), i = 0; i in elements && !element; i += 1){ if(elements[i].className === "eMessage"){ element = elements[i]; } } element.insertAdjacentHTML("beforeBegin", '<div>'+before+'</div>'); element.insertAdjacentHTML("afterEnd", '<div>'+after+'</div>'); }; var old = document.write, buffer = []; document.write = function(x){ buffer.push(x); }; </script> <!-- два скрипта. порядок важен --> <script type="text/javascript" src="http://js.sdelajka.com/hellobefore.js"></script> <script type="text/javascript" src="http://js.sdelajka.com/helloafter.js"></script> <div class="eMessage" style="border:1px solid black;">add me</div> <script> document.write = old; onAvailable(buffer[0], buffer[1]); </script> |
Спасибо, почти то что надо :)
Только в фаерфоксе не работает. Можно его как-то и в фаерфоксе работать заставить? |
Цитата:
|
У меня в 3.6 выдает ошибку "element.insertAdjacentHTML is not a function"
Смотрел в хелпе - .insertAdjacentHTML в фаерфоксе не поддерживается. |
Часовой пояс GMT +3, время: 14:09. |