我有看起来像这样的代码:

jQuery('.views-row').each(function(){
    if(jQuery(this).find('.views-field-field-doctor-indicator').length != 0) {
        jQuery(this).css("padding","0px");
        jQuery('.views-field-title span a', this).css("color","#00476b");
        jQuery('.views-field', this).wrapAll('<div class="physician-indicator"></div>');
    }
});


但是意识到,由于页面中存在一些Ajax,因此在用户按下Enter键进行搜索后,它将无法继续工作。您基本上可以看到它的作用,但为了更人性化地对其进行解释,它基本上用于对医生进行分类并将某些属性添加到所需的属性中。

我尝试使用此:

jQuery('#block-views-homepage-redo-block').bind('DOMNodeInserted', function(){
    var target = jQuery(this);
    jQuery('.views-row', target).each(function(){
        if(jQuery(this).find('.views-field-field-doctor-indicator').length != 0) {
            jQuery(this).css("padding","0px");
            jQuery('.views-field-title span a', this).css("color","#00476b");
            jQuery('.views-field', this).wrapAll('<div class="physician-indicator"></div>');
        }
    });
});


在我看来,这非常相似,只是只要内容发生变化,它就会做同样的事情。但是,我得到这个错误:

jQuery Uncaught RangeError: Maximum call stack size exceeded


我了解错误在大多数情况下意味着什么,但我不了解在中断页面方面将有多么大的不同。

-编辑-

这对我有用。我添加了另一个签入,以查看div是否已创建。这样一来,代码就可以跨过所有我首先需要创建的div内容。

jQuery('#block-views-homepage-doctors-redo-block').bind('DOMNodeInserted', function(){
    var target = jQuery(this);
    jQuery('.views-row', target).each(function(){
        var switchTarget = jQuery(this);
        if(!switchTarget.children().hasClass('physician-indicator')) {
            if(jQuery(switchTarget).find('.views-field-field-doctor-indicator').length != 0) {
                jQuery(switchTarget).css("padding","0px");
                jQuery('.views-field-title span a', switchTarget).css("color","#00476b");
                jQuery('.views-field', switchTarget).wrapAll('<div class="physician-indicator"></div>');
            }
        }
    });
});

最佳答案

每次插入元素时都会插入一个元素,因此它基本上是一个无穷循环,它会插入元素,并填满调用堆栈。

wrapAll触发DOMNodeInserted,并触发另一个wrapAll,又触发另一个DOMNodeInserted,所以它就开始了...

09-17 08:00