JS字符串中的ENT_QUOTES

时间:2015-02-02 10:09:40

标签: javascript html-encode

我有这个功能:

function change_this(my_str)
{
    $('#myDiv').html('<input value=\''+my_str+'\'>');
}

当我用这个函数调用这个函数时:

onclick=change_this('Test &#039;');

我在调试器中看到&#039;已转为引号,因此脚本不起作用。

所以我的问题是:如何将字符串中的引号发送到JS函数?

我确信我不是第一个面对这个问题的人,我用Google搜索但没有找到任何简单的解释/答案。

1 个答案:

答案 0 :(得分:1)

你有两个问题。这是因为您在HTML中嵌入了嵌入HTML的HTML,然后您可以通过将JavaScript字符串拼接在一起来生成HTML。你经常切换语言,这让我头晕目眩。

问题1:将正确的字符串输入函数

要在JavaScript中用单引号分隔的字符串中包含单引号,您必须使用\转义它们。

onclick="change_this('Test \'');"

此处无需使用字符引用。 HTML中没有'具有特殊含义。如果您使用&#039;而不是'来划分属性值,则需要使用"三次。

我完全避免使用onclick并支持data-属性和JS事件绑定。

<input type="button" data-foo="Test '">

$("[type=button]").on('click', function (event) {
    change_this( $(this).data('foo') );
});

问题2:将正确的字符串输入HTML属性值。

根据您采用的方法,您需要将'转换为&#039;。请注意,您必须以编程方式执行此操作,因为如果您在onclick属性中使用它,那么在JavaScript引擎甚至可以看到它之前,它将被HTML解析器转换为'

不要使用您当前的方法。将字符串混合在一起制作HTML是一场噩梦。

使用DOM或类似DOM的jQuery。

var input = $("<input />").val(my_str);
$('#myDiv').empty().append(input);