2015-06-29 38 views
0

使用jQuery解析字符串如何逃脫一個jQuery串

message="<div messageid=999 value=something>hello</div>"; 
$(message).attr('messageid'); 

這個偉大的工程......當郵件包含一些字符像除外:

message="!hello world!"; 
$(message).attr('messageid'); 

什麼是解決方案來解決這個問題?

+0

在第二個示例中,字符串不包含html標記,也沒有mesageid屬性,但是您正試圖訪問它,爲什麼? – Wazaaaap

回答

3

當您將字符串作爲第一個參數傳遞給jQuery函數($)時,該函數會嘗試確定它是選擇器還是HTML字符串。

當你使用感嘆號或冒號,並且字符串中沒有HTML標籤時,jQuery會認爲它是一個選擇器,因爲「!」和「:」是選擇器語法的一部分。

這就是爲什麼打電話給$('!hello world!')會引發錯誤。

您可以通過使用$.parseHTML迫使它把它當作一個HTML字符串:

$($.parseHTML(message)).attr('messageid') 

注意,有不使用問題「!」和「:」如果有字符串中的標籤:

message="<div messageid=999 value=something>:No problems here!</div>" 
$(message).attr('messageid') 


我的回答是基於你想避免運行時錯誤的假設。查詢 $('hello world')$($.parseHTML('!hello world!'))上的屬性顯然會返回 undefined

+0

message =「!hello world!」; $($ parseHTML(消息)。)ATTR( '信息id'); 給我同樣的錯誤 – yarek

+0

它不會給這個小提琴的錯誤:http://jsfiddle.net/v7meufvq/你使用的是什麼版本的jQuery? –

+0

用'console.log'包裝它會使其出現在控制檯中,但返回的值仍然是'未定義的',因爲任何給定的字符串都沒有'messageid'屬性。 – IronFlare