Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在继续之前,请等待DOM元素中的特定文本_Javascript_Jquery - Fatal编程技术网

Javascript 在继续之前,请等待DOM元素中的特定文本

Javascript 在继续之前,请等待DOM元素中的特定文本,javascript,jquery,Javascript,Jquery,我有一个函数,它应该在返回值之前等待某些文本更改: function getElementText() { while(isLoading()) { } return $('#element').text(); } function isLoading() { return $('#element')[0] && $('#element').text().indexOf('Loading') >= 0; } 然而,我认

我有一个函数,它应该在返回值之前等待某些文本更改:

function getElementText() {
   while(isLoading()) {
   }
   return $('#element').text();
}

function isLoading() {
    return  $('#element')[0] &&
            $('#element').text().indexOf('Loading') >= 0;
}

然而,我认为空的
虽然
不是一个好的选择(它会阻止事件循环吗?

不需要jQuery或任何其他外部库,您只需使用MutationObserver:

这里是一个简单的示例,当您的文本发生更改时(在我的示例中,5秒后),您将看到一个类型为
characterData
的通知:

//选择目标节点
var target=document.getElementById('some-id');
//创建一个观察者实例
var观察者=新的突变观察者(功能(突变){
突变。forEach(功能(突变){
console.log(mutation.type);
});    
});
//观察员的配置:
var config={attributes:true,childList:true,characterData:true,attributes:true,subtree:true};
//传入目标节点以及观察者选项
observer.observe(目标,配置);
//稍后,你可以停止观察
//observer.disconnect();
setTimeout(函数(){
target.innerText='Changed text!';
}, 5000);

AAA

当元素发生更改时,将触发
domsubtreemedited
事件,因此您可以使用该事件来检测是否加载了文本

可以使用回调函数在加载后返回值。或者更好:(jQuery)承诺

var-element=document.getElementById('element');
函数isLoading(){
返回元素.innerText.indexOf('Loading')>=0;
}
函数getElementText(){
var def=$.Deferred();
如果(!isLoading()){
解析(element.innerText);
返回def.promise();
}
$(元素).on('domsubtreemedited',函数(){
如果(!isLoading()){
解析(element.innerText);
}
});
返回def.promise();
}
getElementText().then(函数(文本){
//文本已加载!
警报(文本);
});
//在3秒钟后加载文本进行演示
setTimeout(函数(){
element.innerText='Changed!';
}, 3000);

使用rxjs以优雅的方式加载:

var source=document.getElementById('source');
var target=document.getElementById('target');
Rx.Observable.fromEvent(源“keyup”)
.filter((e)=>e.target.value==='Admin')
.subscribe(()=>target.innerText=“Matched”)

输入要触发的“管理”

不匹配。

rx.js observable是您最好的朋友。或者我想是的。while循环将冻结页面。您可以使用setInterval检查文本是否已更改。您是否可以在该元素的更改事件上设置侦听器,然后在满足您的条件时调用
getElementText
作为回调,并使用该值?