我有看起来像这样的代码:
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
,所以它就开始了...