我正在创建一个网站,我也想在其上显示一些Java代码。我正在使用AJAX请求从服务器获取HTML内容。然后将内容插入具有id内容的specificiv div元素中。
要插入包含Java代码的HTML内容,我使用的是JQuery的.html(htmlString)
方法。但是,Java代码改变如下:
当Java中使用泛型时,JQuery认为它是一个标签!无论出于何种原因,.html方法会突然将<
和>
之间的所有文字更改为小写字母。
如何避免这种行为?我可以设置任何参数来阻止它这样做吗?它甚至不应该这样做,因为首先它是出乎意料的,其次如果字符是大写或大写并不重要,浏览器仍然可以理解,可能是因为它们是较低的包装它们他们自己在某个方面内部。
修改#1:
.empty()然后.append()导致相同的行为。
修改#2:
有一个问题,我不仅Java code
的结果中有AJAX response
,而且HTML content
也是escape()
,如果我使用{ {1}}。
修改#3:
提到的一条评论,也许我应该重构AJAX响应,以便文本和HTML内容相互分离。这听起来总的来说是一个好主意,也许我会接受它。 不过我想知道,是否有任何方法可以设置HTML内容,而这些内容并不能让内容经历不必要的更改。
答案 0 :(得分:4)
您可以使用jQuery&#39; .text()
。
答案 1 :(得分:3)
在使用.html(htmlString)
方法之前,请将<
和>
替换为<
和>
。
希望这会对你有所帮助。
由于 阿努拉格
答案 2 :(得分:2)
您需要使用escape()函数转义字符串。所以
.html(escape(javaBlock));
答案 3 :(得分:0)
您需要致电escape()
上的htmlString
,具体为.html(escape(htmlString))
。请参阅MDN for more details。
您还可以使用jQuery的.text()
方法,该方法会自动为您执行此操作,例如.text(htmlString)
。
答案 4 :(得分:0)
你可以使用createTextNode()
函数来逃避特殊字符:
所以这会做你想要的:
escapedText = document.createTextNode(yourJavaCodeSnippetText)
$("#yourElementId").html(escapedText)
答案 5 :(得分:0)
Javascript没有HTML实体转换功能,但您可以自己动手。例如:
if(typeof escapeHtmlEntities == 'undefined') {
escapeHtmlEntities = function (text) {
return text.replace(/[\u00A0-\u2666<>\&]/g, function(c) {
return '&' +
(escapeHtmlEntities.entityTable[c.charCodeAt(0)] || '#'+c.charCodeAt(0)) + ';';
});
};
// all HTML4 entities as defined here: http://www.w3.org/TR/html4/sgml/entities.html
escapeHtmlEntities.entityTable = {
34 : 'quot',
38 : 'amp',
39 : 'apos',
60 : 'lt',
62 : 'gt',
};
}
然后致电
.html(escapeHtmlEntities(javaBlock));