理解问题
让我们这样分解:
data = "<a href='' onclick='window.open("+rtndata[j].artist_website+",random_string,'location=no'); return false;'><img src='./images/website.png' alt='artist website'></a>";
111111111221111111112222222222222-----------------------------22222222222222233333333333332222222222222222211111111112222222222222222222222111112222222222222222111111
代码下的行显示了引号的嵌套:
1 - 围绕整个字符串的双引号
<a>
2 -标签的各种属性的单引号
3 - 再次单引号(这是错误的)传递给属性window.open()
内的函数的字符串。onclick
“-” - 破折号用于显示在最外层发生字符串连接的位置。
“3”处的单引号应该是双引号,前面有一个反斜杠。这样它就不会弄乱外部字符串(存储到data
变量中),因为外部 javascript 的解析器会将反斜杠双引号序列转换为“数据”中的一个双引号字符作为字符串。
当浏览器尝试将其解析为真正的 HTML 时,它也不会弄乱传递给onclick
属性的内部字符串,因为双引号可以在 HTML 中的单引号内,就像在 JavaScript 中一样。
并且它将最里面的字符串标识为正在解析的 javascript - onclick
属性的一部分。
很复杂的东西。
解决方案
固定代码是这样的。将两个单引号更改为反斜杠和双引号:
data = "<a href='' onclick='window.open("+rtndata[j].artist_website+",random_string,\"location=no\"); return false;'><img src='./images/website.png' alt='artist website'></a>";
111111111221111111112222222222222-----------------------------2222222222222223333333333333332222222222222222211111111112222222222222222222222111112222222222222222111111
注意OP 发现了问题。我只是在为后人解释为什么它是一个问题,因为 OP 刚刚在评论中提到了它。