2016-03-01 20 views
-6

好了,問題的標題看起來容易,解決的辦法是:如果text()等於做一些

$('.weatherCity').each(function() { 
    if ($(this).text() == 'LONDON') { 
     $(this).text('London Weather'); 
    } 
}); 

,但我工作Yahoo! Weather Plugin並想更改城市名稱,它不是iframe和我們允許改變style等等,但看起來它不會讓這個插件中的任何文本改變。我以爲瀏覽器讀取我的代碼,然後雅虎得到天氣,然後我用promise().done(),但沒有任何改變。

jsFiddle

預先感謝

-jiff

+1

您遇到的問題是,包含位置文本的元素會被動態添加到DOM中,因此在頁面加載時運行代碼不起作用。你需要在插件加載時運行它,但插件不會引發任何事件,所以我不相信這是可能的。你可以使用'setTimeout()',但這將是非常不可靠的,不是很好的做法。根據自己的網站,插件本身已停止使用,您是否在尋找替代方案來滿足您的要求? –

+0

@RoryMcCrossan我搜索過,這對我的工作是最好的,我知道它已停產,但仍然有效。而有趣的是「倒票」!看起來像人們喜歡把投票推到他們無法解決的每個問題上! ,我的回答是你的回覆,我想知道它是否可能。不明白爲什麼他們反對投反對票。感謝您的回覆 – Pedram

+0

而不是超時,你可以使用突變觀察者來檢測插件何時添加內容或甚至使用一些CSS轉換事件(哈克) –

回答

1

作爲一種解決這個問題,你可以使用這樣的,

var interval = setInterval(function() { 
    if ($('.weatherCity').length) { 
    $('.weatherCity').each(function() { 
     if ($(this).text().trim() == 'London') { 
     $(this).text('London Weather'); 
     } 
    }); 
    clearInterval(interval); 
    } 
}, 100); 

Fiddle

不斷檢查元素使用setInterval並停止檢查一旦找到它。