在jquery中转义引号

rsh*_*ers 1 javascript jquery

我在以下示例中有一些问题转义引号:

var newId = "New Id number for this line";

$(id).html('<td><input type="text" id="my' + newId + '" onKeyUp="runFunction("#my' + newId + '");"></td>');
Run Code Online (Sandbox Code Playgroud)

问题是,当我查看生成的代码时,id会更新到id="myNewId",但在函数调用中它看起来像这样:

onkeyup="runFunction(" #row2="" );=""
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Tom*_*lak 7

只是不要将JavaScript放入HTML字符串:

$(id).html(
  '<td><input type="text" id="my' + newId + '"></td>'
).find("input").keyup( function() {
  runFunction("#my" + newId);
});
Run Code Online (Sandbox Code Playgroud)

考虑一下,在这种特殊情况下,您可以将keyup()函数体交换为:

  runFunction(this);
Run Code Online (Sandbox Code Playgroud)

因为你似乎想在对象本身上运行该函数.


Gum*_*mbo 6

您需要对HTML属性值使用HTML字符引用.试试这个:

function htmlEncode(str) {
    var map = {"&":"amp", "<":"lt", ">":"gt", '"':"quot", "'":"#39"};
    return str.replace(/[&<>"']/g, function(match) { return "&" + map[match] + ";"; });
}

$(id).html('<td><input type="text" id="my' + newId + '" onKeyUp="' + htmlEncode('runFunction("#my' + newId + '");') + '"></td>');
Run Code Online (Sandbox Code Playgroud)