Javascript 在单引号字符串中,围绕onClick的参数转义双引号

Javascript 在单引号字符串中,围绕onClick的参数转义双引号,javascript,escaping,Javascript,Escaping,我问的是如何摆脱这种束缚: function my(mstr){alert(mstr);}; document.getElementById('home').innerHTML = '<button onclick="my("a")">a</button>' 函数my(mstr){alert(mstr);}; document.getElementById('home')。innerHTML='a' 我们有'所以它的双引号在单引号中的双引号中 简单的“…”给出语法错误

我问的是如何摆脱这种束缚:

function my(mstr){alert(mstr);};
document.getElementById('home').innerHTML = '<button onclick="my("a")">a</button>'
函数my(mstr){alert(mstr);};
document.getElementById('home')。innerHTML='a'
我们有
'

所以它的双引号在单引号中的双引号中

简单的
“…”
给出语法错误。

我知道我可以像
“…”

但我想知道为什么会出现这种语法错误

编辑:这里是JSFIDLE

编辑2:BallBin说它将
a
so
试图避开反斜杠:
'a'
它呈现为奇怪:
a

并给出错误:

Uncaught SyntaxError:HTML属性值中由双引号分隔的意外标记非法

双引号应表示为
字符在HTML中没有特殊意义

您的JavaScript字符串由
字符分隔,因此
不需要对JavaScript进行转义(使用
\


不过,我首先要避免将JS嵌套在JS中的HTML中。使用DOM而不是字符串操作

// Create button with content and an event handler
var button = document.createElement('button');
button.appendChild(document.createTextNode('a'));
button.addEventListener("click", clickHandler);

// Get container, empty it and add the button to it
var container = document.getElementById('home');
container.innerHTML = ''; // Delete all nodes inside the element
container.appendChild(button);

function clickHandler(event) {
    my("a");
}

更好的方法是首先不内联事件处理程序。改为使用。您得到的实际错误是什么?因为当它呈现按钮时,它呈现为
a
。你需要双引号和单引号的混合。@Chris问题是你不能在那里使用双引号;您的脚本导致无效的HTML输出。在这种情况下,您必须在双引号内使用单引号。另一个选项是将函数调用定义为字符串变量,如
var functionCall=“my(\'a\”)
然后使用
document.getElementById('home').innerHTML='a”
@Chris,就像第三个示例中的
onclick=“my(\'a\”)”
一样。该示例将其呈现为
a
。现在单击按钮时,它将调用
my()
传递字符“a”。