2011-04-03 40 views
6

我正在爲網頁提供一個工具提示式應用程序,並且希望每次用戶移動一個單詞時都會觸發一個Javascript事件。如何提高大字符串JavaScript工具提示的性能?

目前,我通過在每個單詞周圍放置一個<span>標籤來工作。 <span id="word1">word1</span> <span id="word2">word2</span> <span id="word3">word3</span>,然後處理每個鼠標懸停/跳出事件。

這工作正常,但有時輸入文本是數千個單詞,所有這些標籤似乎減慢瀏覽器(至少減緩IE,至少)。我使用事件委託,因此不會附加數千個事件處理程序,並且一旦渲染就足夠快。問題是,當我通過innerHTML設置單個標記的單詞時,首先可能需要8秒以上的時間,並凍結瀏覽器。爲了澄清我的意思 - 用戶輸入一個文本字符串,它通過ajax發送到服務器,HTML標籤添加到服務器端。在ajax成功回調中,我設置了新的HTML通過直接設置元素的innerHTML。延遲是所有的innerHTML設置,而不是服務器端。)

是否有反正可以更改爲只是<span id="line1">word1 word2 word3</span>仍然有效?有沒有什麼方法可以知道用戶在沒有將每個標籤放在每個標籤周圍的情況下使用哪個特定字詞?

回答

1

在遇到this page後,事實證明這是可能的,至少在某種程度上是可能的。下面的解決方案僅適用於IE,但這是我所需要的,因爲其他瀏覽器對於單個標籤解決方案來說足夠快。

<script> 
function getWordFromEvent (evt) 
{ 
    if (document.body && document.body.createTextRange) 
    { 
     var range = document.body.createTextRange(); 
     range.moveToPoint(evt.clientX, evt.clientY); 
     range.expand('word'); 
     document.getElementById("wordMouseIsOver").innerHTML = range.text; 
    } 
} 
</script> 
<span onMouseMove="getWordFromEvent(event)">word1 word2 word3</span> 
<BR> 
<span id="wordMouseIsOver"> </span> 
+0

你應該編輯你的問題,而不是回覆。 – Anax 2011-04-03 19:10:23