所以我当前正在使用以下代码执行我的jQuery。但是,如您所见,我在执行代码的第二部分时设置了一些计时器。我想看看#objectPrice是否存在,然后运行定时代码,但只能运行一次。这样我就可以更换计时器了。
var checkExist = setInterval(function() {
if (jQuery('#objectPrice').length) {
var content = jQuery('#prisen').html();
objectPrice.value = content.replace(/\D/g,'');
}
}, 200); // check every 200ms
setTimeout(function() { jQuery("#downPayment").focus(); }, 2200);
setTimeout(function() { jQuery("#downPayment").blur(); }, 2205);
答案 0 :(得分:1)
正确的方法 您可以通过观察要检查的元素的直接父元素来做到这一点,假设您的元素将被添加到以下div中的页面中:
<div id="parent-div">
<div>child 1</div>
<div>child 2</div>
</div>
您将需要观察添加到#parent-div
的任何新子级,并在发生这种情况时触发一个函数:
const callback = function(mutationsList, observer) {
for(let mutation of mutationsList) {
if( mutation.addedNodes.length > 0){
for(let node of mutation.addedNodes) {
let jqueryNode = jQuery(node);
if(jqueryNode.is('#objectPrice')){
var content = jQuery('#prisen').html();
objectPrice.value = content.replace(/\D/g,'');
}
}
}
}
};
const observer = new MutationObserver(callback);
observer.observe(jQuery('#parent-div')[0], {childList: true});
但是,如果您不想更改当前代码,可以使其递归并在第一时间调用它,如下所示:
var checkingFunction = function () {
if(jQuery('#objectPrice').length){
var content = jQuery('#prisen').html();
objectPrice.value = content.replace(/\D/g,'');
}else{
setTimeout(function() { checkingFunction() }, 200);
}
}
checkingFunction();