为什么<变成<?

时间:2012-03-11 04:39:11

标签: javascript jquery replace

我试图将表情符号(图像)的html替换为纯文本。但我需要显示普通的HTML。

在这里:http://jsfiddle.net/xk2VX/

我正在使用:

$("code").each(function() {
    var a = ['<img class="smile" src="http://static.yamma.org/images/icons/smile.png">', '&lt;img class="laugh" src="http://static.yamma.org/images/icons/laugh.png"&gt;'],
        b = [":)", ":D"];

    for (var d = 0; d < a.length; d++) {
        var e = $(this).html(),
            f = e,
            g = f.indexOf(a[d]);
        while (g != -1) {
            f = f.replace(a[d], b[d]);
            g = f.indexOf(a[d]);
        }
        $(this).text(f);
    }
});​

它返回:&lt;div&gt;Hi&lt;/div&gt; :) :D :) :D; 但它应该返回:<div>Hi</div> :) :D :) :D;

我只是不明白为什么<>&lt;&gt;取代

有解决方法吗?提前谢谢。

2 个答案:

答案 0 :(得分:4)

我注意到,当您应该拨打.text()时,即使您在开头正确拨打.html()时,也会在for循环结束时致电.html()

    for (var d = 0; d < a.length; d++) {
        var e = $(this).html(),
            f = e,
            g = f.indexOf(a[d]);
        while (g != -1) {
            f = f.replace(a[d], b[d]);
            g = f.indexOf(a[d]);
        }
        $(this).text(f);
    }

.text()始终将HTML特殊字符转换为实体,因此它们不会被视为标记,因为它需要 text ,而不是 HTML

答案 1 :(得分:0)

有时阅读API会有所帮助:http://api.jquery.com/text/#text2 - 致电.text()时,

  

用其HTML实体等价物替换特殊字符

所以,就像@BoltClock说的那样,你正在使用错误的方法来做你想做的事。