如何防止JQuery方法.html()改变大小写?

时间:2015-04-18 09:56:03

标签: javascript jquery html ajax methods

我正在创建一个网站,我也想在其上显示一些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内容,而这些内容并不能让内容经历不必要的更改。

6 个答案:

答案 0 :(得分:4)

您可以使用jQuery&#39; .text()

答案 1 :(得分:3)

在使用.html(htmlString)方法之前,请将<>替换为&lt;&gt;

希望这会对你有所帮助。

由于 阿努拉格

答案 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));