重构javascript以避免撇号引起问题?

重构javascript以避免撇号引起问题?,javascript,jquery,ajax,string,apostrophe,Javascript,Jquery,Ajax,String,Apostrophe,我接管了一个网站,有很多javascript看起来像这样 function BuildHTMLString(item) { return "<input name='Text' Type='text' value='" + item+ "' />"; } 函数BuildHTMLString(项) { 返回“”; } 这些字符串随后将用于过帐表单中。我意识到,如果变量项中有一个撇号,整个过程就会崩溃 以编程方式填充文本框的推荐方法是什么?这些文本框将作为

我接管了一个网站,有很多javascript看起来像这样

 function BuildHTMLString(item)
 {  
       return "<input name='Text' Type='text' value='" + item+ "' />";
 }
函数BuildHTMLString(项)
{  
返回“”;
}
这些字符串随后将用于过帐表单中。我意识到,如果变量项中有一个撇号,整个过程就会崩溃

以编程方式填充文本框的推荐方法是什么?这些文本框将作为表单帖子的一部分,而表单帖子不会创建名称中带有撇号的问题。

您可以使用编程方式创建元素,然后使用属性:

function buildHtmlString(item) {
    var element = document.createElement("input");
    element.setAttribute("name", "Text");
    element.setAttribute("type", "text");
    element.setAttribute("value", item);

    return element.outerHTML;
}
在Chrome上,
buildHtmlString(“这有一个引号\”);
给了我:

<input name="Text" type="text" value="this has a quote &quot;"> 

在使用jQuery时,您可以使用它来创建元素:

var $input = $('<input>')
    .attr('name', 'Text')
    .attr('type', 'text')
    .attr('value', item);
var$input=$(“”)
.attr('名称','文本')
.attr('type','text')
.attr(“价值”,项目);
现在您有了一个可以插入DOM或进一步操作的对象


如果您希望在DOM中插入HTML以外的任何内容,可以使用
$input.get(0).outerHTML
来获取它。

创建实际元素而不是使用字符串怎么样?那代码无论如何都不会工作。@Dave Newton-你能澄清一下吗???@leora你编辑了它;显然现在没问题。在任何情况下,你都需要JS转义你嵌入的任何字符串。虽然我同意这比构建字符串更好。你怎么做这将处理撇号问题。如果item变量中有单词“not”,该怎么办“或者使用撇号的东西工作得很好,因为我只是将变量原样传递给jQuery。它能解决这个问题。在我的测试中,你会得到这样一个结果:
为什么投反对票?问题标签表示它使用jQuery,并且答案正确?+1。请注意,这可以简化为
$(“”,{'name':'Text','type':'Text','value':item})
是我应该将单引号更改为的要点之一\“?@leora哦,不,这两种方法都应该有效。如果用一个引号调用它,它将不会被转义。相反,生成的HTML将使用双引号,这样就不需要转义任何单引号。但是,双引号将被转义为
。我尝试了这种方法,但遇到了一个问题,请参见此问题:
var $input = $('<input>')
    .attr('name', 'Text')
    .attr('type', 'text')
    .attr('value', item);