jQuery为动态内容添加功能

时间:2017-06-21 13:55:04

标签: jquery dynamic replace behavior

我正在维护一个Drupal网站,我们最近在其中安装了Google-CSE模块,该模块可以索引并提供搜索结果。

使用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加载后续页面时失败。

我说实话,我不知道行为是如何正确实施的。在研究这个问题的解决方案时,我读到的行为可以附加到动态创建的元素上。但是,我没有得到理想的结果。

1 个答案:

答案 0 :(得分:0)

编辑: -

尝试使用ajaxComplete。每当ajax请求完成时,都会触发ajaxComplete

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

OLD:

假设您的容器ID是#container,其中数据是通过ajax加载的。

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