2017-06-21 136 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

答案更新,我希望这会有所帮助 –