Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.05.2012, 22:28
Новичок на форуме
Отправить личное сообщение для kulibin Посмотреть профиль Найти все сообщения от kulibin
 
Регистрация: 19.05.2012
Сообщений: 6

Вставить выводы разных яваскриптов перед и после элемента
Добрый вечер.

Задача следующая:
Есть страница 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 видно что результат мы не получаем (в фаерфоксе код яваскриптов выводится в самом низу страницы, один за другим - хотя просто текст выводится там где надо. В хроме эти коды вообще не отображаются).

Подскажите пожалуйста как дорешать задачу.
Ответить с цитированием
  #2 (permalink)  
Старый 19.05.2012, 23:17
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Чтото Вы не так решаете
зачем там дивы
создаем скрипт
var sc=document.createElement('script');
sc.setAttribute('src','...before.js');
и вставляем его перед вашим злементом
Ответить с цитированием
  #3 (permalink)  
Старый 19.05.2012, 23:54
Новичок на форуме
Отправить личное сообщение для kulibin Посмотреть профиль Найти все сообщения от kulibin
 
Регистрация: 19.05.2012
Сообщений: 6

А как это вставить перед нужным элементом?
Ответить с цитированием
  #4 (permalink)  
Старый 19.05.2012, 23:58
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

elem.parentNode.insertBefore(sc,elem);
Ответить с цитированием
  #5 (permalink)  
Старый 20.05.2012, 00:24
Новичок на форуме
Отправить личное сообщение для kulibin Посмотреть профиль Найти все сообщения от kulibin
 
Регистрация: 19.05.2012
Сообщений: 6

Сделал как вы сказали - результат один в один с тем что был (в фаерфоксе код яваскриптов выводится в самом низу страницы, один за другим - хотя просто текст выводится там где надо. В хроме эти коды вообще не отображаются).
Ответить с цитированием
  #6 (permalink)  
Старый 20.05.2012, 00:49
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от kulibin Посмотреть сообщение
Сделал как вы сказали - результат один в один с тем что был (в фаерфоксе код яваскриптов выводится в самом низу страницы, один за другим - хотя просто текст выводится там где надо. В хроме эти коды вообще не отображаются).
я чтото вообще не понял почему в FF код скриптов выводится и зачем его надо выводить
там наверху у Вас написано вывести результат скрипта-то есть текст а не сам скрипт
Ответить с цитированием
  #7 (permalink)  
Старый 20.05.2012, 01:18
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

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>

Последний раз редактировалось melky, 20.05.2012 в 01:31.
Ответить с цитированием
  #8 (permalink)  
Старый 20.05.2012, 13:04
Новичок на форуме
Отправить личное сообщение для kulibin Посмотреть профиль Найти все сообщения от kulibin
 
Регистрация: 19.05.2012
Сообщений: 6

Спасибо, почти то что надо
Только в фаерфоксе не работает. Можно его как-то и в фаерфоксе работать заставить?
Ответить с цитированием
  #9 (permalink)  
Старый 20.05.2012, 14:35
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от kulibin Посмотреть сообщение
Спасибо, почти то что надо
Только в фаерфоксе не работает. Можно его как-то и в фаерфоксе работать заставить?
у меня в фаерфоксе работает.
Ответить с цитированием
  #10 (permalink)  
Старый 20.05.2012, 15:25
Новичок на форуме
Отправить личное сообщение для kulibin Посмотреть профиль Найти все сообщения от kulibin
 
Регистрация: 19.05.2012
Сообщений: 6

У меня в 3.6 выдает ошибку "element.insertAdjacentHTML is not a function"
Смотрел в хелпе - .insertAdjacentHTML в фаерфоксе не поддерживается.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как добавить текст после элемента? AquaGen jQuery 9 23.08.2011 16:21
как удалить элемент который идет после элемента .form? FRIE jQuery 2 03.06.2011 14:35
Текст после элемента Vulkan Events/DOM/Window 3 15.10.2010 11:59
Удалить ряд символов перед или после курсора до определенного сивола brd Javascript под браузер 3 30.10.2009 08:20
У элемента img внутри form пропадает событие после onsubmit формы Eugene Events/DOM/Window 2 18.06.2009 19:21