2017-06-21 575 views
0

我在維護最近安裝了Google-CSE模塊的Drupal網站,該模塊會索引並提供搜索結果。jQuery爲動態內容添加功能

使用jQuery,我需要修改搜索產生的節點標題。這是十分必要的,因爲搜索結果會動態加載到已加載的搜索結果頁面中。

使用下面的代碼:

(function ($) { 

    Drupal.behaviors.cse = { 
     attach: function (context, settings) { 

      jQuery(document).ready(function ($) { 
       checkContainer(); 
      }); 

      function checkContainer(){ 
       if($('div#___gcse_0 div.gsc-resultsbox-visible').is(':visible')){ 
        $('div#___gcse_0 div.gs-title a.gs-title').each(
         function(){ 
          $(this).css('color', 'green'); 
          text = $(this).text(); 
          $(this).text(text.replace('| MATCHING TEXT TOBE SUBSTITUTED','---***---')); 
         } 
        ); 
       }else{ 
        setTimeout(checkContainer, 50); 
       } 
      } 
     } 
    } 

})(jQuery); 

上面的代碼工作在搜索結果的第一頁上,但是當後續頁通過AJAX加載失敗。

我說實話,我不知道行爲是如何正確實施的。在研究這個問題的解決方案時,我讀取行爲可以附加到動態創建的元素。但是,我沒有得到理想的結果。

+0

checkContainer僅在文件上被調用。你必須綁定動態添加的數據並再次調用checkContainer。 –

+0

@NidhinChandran:謝謝,但我需要更多的幫助。我是新來的。 – sisko

+0

你能分享ajax功能嗎?我想你只需要在ajax調用結束後調用checkContainer。你可以在'ajax done'內做到這一點 –

回答

0

編輯: - 使用ajaxComplete

嘗試。每當ajax請求完成時,將觸發ajaxComplete

$(document).ajaxComplete(function() { checkContainer(); });

OLD:

假設你的容器ID #container其中數據是通過AJAX加載。

jQuery(document).on('change', '#container', function() { checkContainer(); });

+0

僅在輸入字段,textareas和選擇列表元素上檢測到更改事件。它不能用於觸發一個響應時,Ajax加載頁面的方面 – sisko

+0

答案更新,我希望這會有所幫助 –