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
作为回调,并使用该值?