2013-11-25 69 views
0

我有一個選擇,以下是控制檯輸出。HTML:獲取特殊字符而不會格式化

> select.options[select.selectedIndex] 
    <option value=​"49">​books & stationary​</option>​ 
> select.options[select.selectedIndex].innerHTML; 
    "books &amp; stationary" 

當我使用innerHTML把它格式化值,並取代&&amp;我?我怎樣才能格式化值?

+0

使用'pre'標籤? –

+0

將「&」替換爲「&」?或者你的意思是用「&amp」代替「&」? – Chelseawillrecover

+0

使用'decodeURIComponent(select.options [select.selectedIndex] .innerHTML)' – Prabhuram

回答

2

在詢問innerHTML時,您需要HTML。在HTML中,&字符是特殊字符,在編寫books & stationery時應該是books &amp; stationery,這在技術上是錯誤的。瀏覽器非常聰明,可以在不含糊的情況下識別您的意思,並對其進行更正。因此,當你要求HTML返回時,你會得到正確的值。

如果你想文本,那是另一回事。使用.textContent而不是.innerHTML

如果你已經得到了 HTML和想要去除HTML標記,並從它那裏得到的文本,你可以這樣做:

function strip_html_to_text(html) { 
    var el = document.createElement('div'); 
    el.innerHTML = html; 
    return el.textContent; 
} 
+0

寫作'書籍和文具'是不是一個錯誤,除了在XHTML。並且'&'被存儲在DOM中。它是序列化,由引用「innerHTML」引起,將其轉換爲「&」。 –

1

原來是相當簡單的。文本函數調用給出我正在尋找的文本

select.options [select.selectedIndex] .text;

output: books & stationary 
+0

這是最好的答案,因爲所有瀏覽器都支持'text'屬性。 ('textContent'屬性在IE 8及更低版本中缺少支持。) –

1

使用帶的textContent代替innerHTML的替換一起:

select.options[select.selectedIndex].textContent.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); 
1

如果你只是想選擇的選項的純文本。您可以使用.textContent而不是使用.innerHTML

Try this

.textContent