2014-10-30 101 views
2

我需要使用javascript更新html DOM,方法是插入一个链接,当用户单击Thymeleaf模板中的链接时将调用JavaScript函数。如何在thymeleaf中跳过单引号和javascript代码

$.ajax({ 
    type: "GET", 
    beforeSend: function(xhrObj){ 
    xhrObj.setRequestHeader("Content-Type","application/json"); 
    xhrObj.setRequestHeader("Accept","application/json"); 
    }, 
    url: "https://stackoverflow.com/users/list", 
    dataType:"json", 
    success: function(data, textStatus, jqXHR){ 
     var table = $("#userlist").children(); 
     for(i in data){ 
      table.append("<tr><td><a onclick='user_see("+data[i].userId+")' th:href='#'>"+data[i].userId+"</a></td><td>"+data[i].firstName+"</td><td>"+data[i].lastName+" 
      } 
    } 
}); 

事实证明,Thymeleaf用双引号替换单引号。我曾尝试与\逃避燎报价”,但我只当页面加载

周四10月30日十七时55分21秒EAT 2014 有意外的错误(类型=一个Thymeleaf解析错误结束内部服务器错误,状态= 500)。 异常解析文档:template =“users/list”,

如何避免单引号?

回答

1

最安全的事情不是将HTML附加为字符串,而是使用DOM API代替。它更加小心,但避免了报价问题:

data.forEach(function(datum) { 
    var tr = document.createElement('tr'); 
    var td = document.createElement('td'); 
    var a = document.createElement('a'); 
    a.onclick = function() { user_see(datum.userId); }; 
    a.setAttribute('th:href', '#'); 
    a.innerHTML = datum.userId; 
    tr.appendChild(td); 
    td = document.createElement('td'); 
    td.innerHTML = datum.firstName; 
    tr.appendChild(td); 
    td = document.createElement('td'); 
    td.innerHTML = datum.lastName; 
    tr.appendChild(td); 
    table.appendChild(tr); 
} 
+0

谢谢。这样更清洁。那么这是否意味着不可能逃避报价? – 2014-10-31 03:45:51

+0

几乎所有东西都*可能*。根据引号出现的位置,你可以尝试做一个简单的'.replace(/'/,“\\'”)或类似的。 – 2014-10-31 08:02:19

相关问题