を続行する前にDOM要素内の特定のテキストを待ち?それはイベントループを遮断する)私はそれが値を返す前に変更するためにいくつかのテキストを待つべき機能を持っている
2
A
答えて
1
jQueryのまたは任意の他の外部ライブラリの不要を、あなたは単にMutationObserverを使用することができます。https://developer.mozilla.org/en/docs/Web/API/MutationObserverここ
簡単な例は、あなたがタイプcharacterData
の通知を持っていますとき、あなたをテキストの変更(私の例では5秒後):
// select the target node
var target = document.getElementById('some-id');
// create an observer instance
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log(mutation.type);
});
});
// configuration of the observer:
var config = { attributes: true, childList: true, characterData: true, attributes: true, subtree: true };
// pass in the target node, as well as the observer options
observer.observe(target, config);
// later, you can stop observing
//observer.disconnect();
setTimeout(function() {
\t target.innerText = 'Changed text!';
}, 5000);
<div id="some-id">
AAA
</div>
観察者の設定から変更内容
+0
注:これはIE <11では機能しません –
0
DOMSubtreeModified
イベントのためにスパイする必要はありませんすべてのプロパティを削除します要素が変更されたときにトリガーされるので、それを使ってテキストがロードされているかどうかを検出できます。
コールバック関数を使用して、ロード時に値を返すことができます。それとももっと良い:(jQuery)約束!
var element = document.getElementById('element');
function isLoading() {
return element.innerText.indexOf('Loading') >= 0;
}
function getElementText() {
var def = $.Deferred();
if (!isLoading()) {
def.resolve(element.innerText);
return def.promise();
}
$(element).on('DOMSubtreeModified', function() {
if (!isLoading()) {
def.resolve(element.innerText);
}
});
return def.promise();
}
getElementText().then(function (text) {
// Text is loaded!
alert(text);
});
// Load text after 3 seconds for demonstration
setTimeout(function() {
element.innerText = 'Changed!';
}, 3000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="element">Loading</div>
1
rxjsとエレガントな方法:
var source = document.getElementById('source');
var target = document.getElementById('target');
Rx.Observable.fromEvent(source, 'keyup')
.filter((e) => e.target.value === 'Admin')
.subscribe(() => target.innerText = "Matched.");
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.4.0/Rx.min.js"></script>
<input id="source" /> <strong>input 'Admin' to trigger</strong>
<p id="target">Not match.</p>
関連する問題
- 1. 、私はすべてのそのテキストを知りたい私はハイパーリンクされているいくつかの単語で大きなテキストを持っている
- 2. Expressは、私はそれを返す前に値を計算するために、いくつかの機能を実行したい
- 3. 待ち、私はこのように変更するブール値を待つスレッドを持っている状態
- 4. 私はpythonで機能するために(エントリー)の値を渡したいが、私はいくつかのエラーを持っている
- 5. VB.NETは、私はいくつかの値を返すべき機能を持っているデータベースから値を取得し、ドロップダウンメニュー
- 6. 私はいくつかの項目でスピナーを持っていますが、そのうちのいくつかは長いテキストを持っています
- 7. Djangoは、私がモデルを保存する前に、いくつかの値を変更する必要が変更
- 8. PIVOT機能は、私が名前の2つのテーブルを持っている
- 9. 待機するonSuccessは私のCards.classにそのようないくつかのJSONファイルを取得するために、私は機能を持つクラスを持っているJSON
- 10. 変更のWinsock APIは、私は1つの点で、私はインターネットにアクセスするためにコンパイルされたバイナリの機能を無効にするために持っていたし、私はそれをやったか忘れてしまったことを覚えておいてください0または-1
- 11. VS2010といくつかの「メイン」機能に関するいくつかのプロジェクトを持っています
- 12. 私はバグを持っていることが、Javaの機能を持っていると私はそれを
- 13. jqueryの異なるセレクターは、私は、TDがクリックされたとき、それはその目、その上に直接で見つけ、私はのためのクラスを持っていなかった前に、それは</p> <p>幅だ変化する機能を持っている
- 14. 私は、私は1つの迅速な機能を持っていると私はいずれかが、私はそれを変換するために助けることができる客観的Cに変換することを複数回
- 15. イベントは前に私はパセリのためのいくつかのフォームとスクリプトを持っているparsley.js
- 16. 値を返す前に待ってください
- 17. 機能は前に私がFuel.postが終了する前に値を返すFuel.postと機能を持っているFuel.post
- 18. は、それが私には、以下の機能を持っている
- 19. Javaの機能は、一般的なデータ型のいくつかの値を返すために持っているJavaで扱うNullPointerExceptionが
- 20. 値を返す前にネットワークコールが完了するのを待つ
- 21. のAjaxを使用する方法は、私は私のドロップダウンのそれぞれによって選択された値を持ついくつかのデータを表示するために使用され、次のコード持っているオブジェクト
- 22. は、私がこのように、いくつかのファイル内のコントローラとアプリを持っている特急ミドルウェア、すべての機能が、1つのコントローラ
- 23. Wordpressのは、だから私は、カスタム画像サイズを作成するために私の機能ファイル内のいくつかのコードを持っている
- 24. 私は機能を持つアプリを作っています
- 25. 大きい画像のためにズームインとズームアウト機能を持っている良いjQueryライトボックスプラグインをいくつか与えることができますか?
- 26. ネストされたが、私はいくつかのモデルを持っているいくつかのモデル
- 27. スレッドを持っているどのようにそれまでは待つ他はすべて
- 28. 1つのシナリオの仕上げが実行するときに2つのシナリオを持って、私は機能の下に持っている1つのブラウザセッション
- 29. HTMLは、私が注意するためにいくつかのHTMLテキストを記述しようとすると、私はエラー(HTMLは、いくつかの禁止のタグを持っているので、私は思う)持っているコンテンツ
- 30. データベースの設計 - 私はアップロードされたイメージの列について多くの列を持つべきですか、それとも、私はそれを新しい表にたくさんの行を入れておくべきですか?
rx.js、観察はあなたの親友です。またはEventEmitter – Val
私はそう思います。 whileループはページをフリーズします。 setIntervalを使用して、テキストが変更されたかどうかを確認できます。 – vabii
その要素のchangeイベントにリスナーを置くことができませんでしたし、 'getElementText'をコールバックとしてあなたの条件を満たすときに値で呼び出すことができませんでしたか? – ken4z