2015-08-29 23 views
6

雖然在一個項目我碰到一個bug跑,發現了這個意外的行爲的工作:爲什麼使用.html()打破這個替換表達式?

如果我叫.replace()一個字符串,並將結果設置爲使用.text()替換功能一個div工程,我期望的那樣。

但是,如果我在字符串上調用.replace()並使用.html()將結果設置爲div,則目標文本在字符串中不會被替換。

這裏是我的意思的例子:

\t $('#result1').text('¤cyId'.replace('¤cyId','&currencyId')); // works 
 
\t $('#result2').html('¤cyId'.replace('¤cyId','&currencyId')); // doesnt work 
 

 
    var result = '¤cyId'.replace('¤cyId','&currencyId') 
 
\t $('#result3').text(result); // works 
 
\t $('#result4').html(result); // doesnt work
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="result1"></div><br> 
 
<div id="result2"></div><br> 
 
<div id="result3"></div><br> 
 
<div id="result4"></div>

我看到使用.text()代替.html()解決問題,但...

爲什麼會發生這種情況?

+0

*「目標文本未在字符串中替換」* - 否,目標文本*被替換。當結果被視爲造成您的問題的html時,會發生什麼情況。 – nnnnnn

回答

6

的內容替換工作得很好。

它只是看起來像錯誤的字符串中的元素結束了,當你使用html方法,因爲&curren是由瀏覽器解碼爲¤,所以&currencyId顯示爲¤cyId

當您使用text方法時,文本不會被解碼爲HTML代碼,因此.text("&currencyId").html("&amp;currencyId")具有相同的效果。

¤字符的HTML實體是&curren;,但瀏覽器也接受沒有分號的格式&curren

+0

啊,我從來沒有想到「瀏覽器也接受沒有分號的表格&curren」。謝謝! – DelightedD0D

1

因爲& curren是一個html實體,而.html解析html實體,而.text則逐字離開它們。

+0

不要忘記冒號並格式化您的答案。 –

+0

所以要清楚,'.replace()'語句每次都有效。 – nnnnnn

1

嘗試

$('#result2').html('¤cyId'.replace('¤cyId','&amp;currencyId')); 

&在HTML應該是&amp;

相關問題