2010-11-24 76 views
2

我想添加一個數據屬性到一個HTML元素。數據屬性(數據描述)可以包含特殊字符,例如,apostrope。使用jQuery添加數據屬性(帶特殊字符)到一個DOM元素

InsertHtml = InsertHtml + '<tr id="DashboardRow0" data-description=\'' + JSON.stringify(data[0])+ '\'><td>' + </td></tr>'; 
htmlElement.append(InsertHtml); 

訪問此數據在下面給出的代碼...

var $row = $("#DashboardRow0"); 
var jsonData = eval('(' + $row.attr('data-description') + ')'); 

但問題是......如果有內JSON.stringify(data[0])一個單引號data..the瀏覽器與替換它"有效地終止字符串。

是否有任何已知的解決方案將具有特殊字符的數據屬性添加到節點?

+2

那eval傷害了我的眼睛。 – 2010-11-24 07:49:39

+0

如果可能,儘量避免使用eval,如果有任何選項,是否嘗試使用jquery.metada插件。 – kobe 2010-11-24 07:51:53

回答

6

嘗試字符串化

data[0].myProblemField = escape(data[0].myProblemField) 
JSON.stringify(data[0]) 

<編輯之前逃脫數據>
或更好

for(var prop in data[0]) if(typeof(data[0][prop]) == "string") 
    data[0][prop] = escape(data[0][prop]); 

< /編輯>

事後

var jsonData = eval('(' + $row.attr('data-description') + ')'); 
jsonData.myProblemField = unescape(data[0].myProblemField) 
2

不完全確定這是否會對您有幫助(即這是否全部發生在同一文檔中),但是您是否考慮過使用jQuery的.data()?它不會有這些問題,因爲數據存儲爲變量。

1

如果您在HTML

<tr id="some &quot; "><td>...</td></tr> 

寫你得到

<tr id="some " "><td>...</td></tr> 
在瀏覽器

相關問題