2011-10-11 71 views
-1

我想要替換TinyMCE增強的輸入字段中的文本的所有出現次數,每當用戶按下空格鍵(類似於Word中的自動更正功能)時,都會發生這種情況。如何過濾特定標籤內的匹配項?

我遇到的問題是當替換的字符串包含觸發器時,它會一直替換它。 例如與

<span class="replaced">hello world</span> 

更換「你好」這將再次取代它成爲

<span class="replaced"><span class="replaced">hello world</span> world</span> 

所以我必須寫一個正則表達式來過濾出文本已經被替換匹配。

你能幫我嗎?

這是我當前的代碼:

for (r in autocorrect_replacements) { 
    if (newHtml.indexOf(autocorrect_replacements[r][0]) > -1) { 
    replacement_html = '<span class="replaced">'+autocorrect_replacements[r][1] + '</span>'; 
    newHtml = newHtml.replace(autocorrect_replacements[r][0],replacement_html); 
    ed.setContent(newHtml); 
} 

我不是正則表達式的粉絲,但我認爲這是在這種情況下,正確的解決方案。

+1

你有沒有考慮使用像jQuery的文檔模型的解析,而不是正則表達式? – Amber

+0

假設我做了類似於dom ='$(ed.getContent())的操作;'每次用戶按下空格鍵時,都會使用jQuery解析所有的東西,並且假設它不像地獄一樣慢,我會得到什麼,現在我有在DOM中搜索所有不是'.replaced'的字符串並在其中應用替換,如:'dom.find(「:not [.replaced]」)',然後迭代替換... 它可能會起作用,但我擔心它對長文本和大量替換不夠好。 – martinszy

+0

RegExp是錯誤的解決方案,jQuery對操縱文本節點並不是很有幫助。您應該走DOM,並在每個文本節點上進行替換。有關StackOverflow的大量問題可以解決這個問題。不管你做什麼,停止做你正在做的一攬子HTML替換。 – user113716

回答

0

獲得跨度的正則表達式將是/<span class="replaced">.*<\/span>/。不知道它是否是正確的解決方案。

你可以做這樣的事情:

for (r in autocorrect_replacements) { 
    if (newHtml.indexOf(autocorrect_replacements[r][0]) > -1) { 
     if (!(/<span class="replaced">.*<\/span>/.test(autocorrect_replacements[r][1]))){ 
      replacement_html = '<span class="replaced">'+autocorrect_replacements[r][1] + '</span>'; 
      newHtml = newHtml.replace(autocorrect_replacements[r][0],replacement_html); 
      ed.setContent(newHtml); 
     } 
}