監視這樣的文字變化,最好的辦法是找到一種方法掛鉤到在瀏覽器中一些相關的和現有的事件和然後看看文本是否已經改變到你想要的。
在較新的瀏覽器(例如IE11 +,Chrome,Firefox和Safari的最新版本)中,可以使用DOM MutationObserver
直接查看文本節點是否更改。
隨時指定元素的子元素髮生更改(子元素包含文本節點)時調用突變回調。
下面是一些可運行的代碼,在此代碼段在一個div文本改變手錶:
document.getElementById("go").addEventListener("click", function(e) {
var t = document.getElementById("test");
t.innerHTML = parseInt(t.innerHTML, 10) + 1;
});
var m = new MutationObserver(function(mRecords, obj) {
log("Current text value: " + document.getElementById("test").innerHTML);
}).observe(document.getElementById("test"), {childList: true, characterData: true, subtree: true});
function log(x) {
var d = document.createElement("div");
d.innerHTML = x;
document.body.appendChild(d);
}
<button id="go">Click Me to Change the Text</button><br><br>
<div id="test">1</div><br><br>
如果您需要舊版本的IE瀏覽器的支持,那麼,接下來最好的辦法是找出瀏覽器中的現有事件在文本更改之前並監視這些事件。當其中一個事件發生時,您可以檢查文本。例如,如果觸發文本更改的操作總是在Ajax調用之後發生,則可以在系統範圍內監視/掛接Ajax調用,然後在每個Ajax調用完成後檢查文本。由於只有在網頁中已經發生其他事情時纔會做任何事情,所以它非常有效。或者,如果文本僅在單擊某個按鈕或某些文本字段發生更改後發生更改,則可以使用事件偵聽器監視這些DOM元素。
爲了更具體地建議如何做到這一點,我們需要查看您的實際情況的細節,並且必須瞭解頁面中的哪些事件會導致不斷變化的文本。如此短暫的定時器也會對在您的頁面或其他選項卡中運行的動畫(如動畫)的性能產生負面影響。
,不建議使用短持續時間計時器輪詢DOM因爲這個殺手機的電池壽命,事實上,移動瀏覽器將嘗試延緩或減慢你爲了使用任何長時間運行的間隔定時器嘗試保持電池壽命。
請注意,永久運行的短時間間隔可能會導致手機電池壽命縮短或導致瀏覽器放慢速度或延遲計時器(爲了延長電池壽命)。不建議在這麼短的時間間隔內進行長期輪詢。更好的辦法是找到改變顯示的實際代碼或者可能改變顯示並掛鉤的事件。例如,如果只在Ajax調用後更改顯示,則可以掛接Ajax調用並在Ajax調用完成後檢查顯示。 – jfriend00
@ jfriend00我同意但沒有更多的上下文,這很難寫出我的答案。這是最好的,我可以推薦這麼少的信息。 –
除了我不認爲這是解決問題的推薦方法。我認爲這項建議是找到更好的方法來解決需要更多信息的問題。僅供參考,最好的StackOverflow答案尋求最佳解決方案,即使它需要更多信息,而不是基於所提供信息的不良解決方案。 – jfriend00