2015-12-22 5 views
1

Я относительно новичок в JavaScript, поэтому, пожалуйста, несите меня.Изменить динамический элемент после завершения скрипта

Я запускаю экземпляр Blackboard Learn LMS. Почувствуй меня позже. Blackboard отображает различные модули для конечных пользователей, чтобы показывать разные фрагменты информации. Объявления модуль содержит нередактируемую код, который отправляет запрос Ajax для отображения всех общесистемных и курсов конкретных объявлений для конкретного пользователя:

<div id="Announcements"> 
    <div id="div_1_1"> </div> 
    <script type="text/javascript"> 
     Event.observe(window, 'load', function() { 
      new Ajax.Request('/webapps/portal/execute/tabs/tabAction', { 
       method: 'post', 
       parameters: 'action=refreshAjaxModule&modId=_1_1&tabId=_2830_1&tab_tab_group_id=_155_1', 
       onSuccess: function (transport) { 
        try { 
         var res = transport.responseXML.getElementsByTagName('contents')[0].firstChild.nodeValue; 
         $('div_1_1').innerHTML = res.stripScripts(); 
         page.globalEvalScripts(res, true); 
        } catch (e) { 
         $('div_1_1') 
          .innerHTML = 'Module information is temporarily unavailable. Please reload the page. <!--' + e.toString() 
          .escapeHTML() 
          .gsub('-', '&#045;') + '-->'; 
        } 
       }, 
       onFailure: function (transport) { 
        $('div_1_1').innerHTML = 'Error loading module.'; 
       } 
      }); 
     }); 
    </script> 
</div> 

модуль вызывает много избыточной информации, которая Я хотел бы спрятаться. Поскольку нет никакого способа изменить этот конкретный код, я пытался выяснить способ сделать одно из следующих действий:

  1. Изменение содержимого модуля с дополнительными сценариями из другого источника на этой странице.

  2. Скопируйте содержимое модуля на новый, редактируемый модуль и отображение этого один вместо,

Оба метода оказалось невозможным, потому что сценарий в Извещения модуль работает только после загрузки страницы полностью, поэтому нет возможности запустить сценарий позже или дождаться завершения процесса.

Любые идеи о том, как я могу изменить содержимое без непосредственного редактирования его кода?

+1

, предполагающий, что есть элемент контейнера (т.е. Div) вокруг содержимого модуля, вы могли бы подключить событие DOMSubtreeModified на этом контейнер с тестом, чтобы увидеть если он загружен (проверка для определенного дочернего элемента, который существует только там, где выполняется загрузка). https://developer.mozilla.org/en-US/docs/Web/Events/DOMSubtreeModified Затем уничтожьте прослушиватель событий и измените его. – Mic

ответ

0

я в конечном итоге с помощью события DOMSubtreeModified:

<script type="text/javascript"> 
    $j = jQuery.noConflict();p 
    $j("#div_1_1").on("DOMSubtreeModified", function() { 
     var div = document.getElementById("div_1_1"); 
     var inner = div.innerHTML; 
     inner = inner.substring(
      inner.indexOf("<!-- Display course/org announcements -->") 
     ); 
     div.innerHTML = inner; 
    }); 
</script> 
Смежные вопросы