JQuery - 用html转义替换引号

时间:2013-06-12 12:53:41

标签: javascript jquery

表格显示从我网站上的数据库中获取的数据,当单击按钮时,使用onclick属性调用“enableEditing”函数。然后,对于表中每行的一个字段,将使用字段作为值显示输入文本框,并将键作为输入名称。

之前:

<tr class="data_row">
    <td class="property_cell">project ref</td>
    <td class="myNumber">200407</td>
</tr>

后:

<tr class="data_row">
    <td class="property_cell">project ref</td>
    <td class="myNumber">
        <input name="project ref" value="200407">
    </td>
</tr>

jQuery的:

function enableEditing(){

    $("#object_data tr").each(function(){
        var key = $(this).children(".property_cell").html();
        var value = $(this).children(".myNumber").text();
        $(this).children(".myNumber").html("<input name='" + key + "' value='" + value + "'>");
    });
}

这样可以正常工作,但是数据库中的某些数据包含语音标记或单引号,当更改为输入字段时会混淆输入html。如何为每个输入字段转义html?

3 个答案:

答案 0 :(得分:3)

有几种方法。其中一个容易出错的问题是让jQuery / DOM执行转义:

var input = $('<input name="'+key+'">');
input.val(value);
$(this).children(".myNumber").empty().append(input);

答案 1 :(得分:2)

尝试

$('.myNumber').contents().replaceWith(function(){
    return $('<input />', { name: $(this).parent().prev().text(), value : $(this).text()});
})

演示:Fiddle

答案 2 :(得分:0)

你应该避免使用.html()来做这样的事情。实际上,只是不要使用jQuery。 Vanilla JS非常优越 - jQuery完全是使用它构建的!

var rows = document.getElementById('object_data').rows, l = rows.length, i, td, inp;
for( i=0; i<l; i++) {
    td = rows[i].cells[1];
    if( !td.className.match(/\bmyNumber\b/)) continue; // failsafe
    inp = document.createElement('input');
    inp.type = "text";
    inp.name = rows[i].cells[0].firstChild.nodeValue;
    inp.value = td.firstChild.nodeValue;
    td.replaceChild(inp,td.firstChild);
}

虽然它可能看起来更像代码,但它的运行速度至少比jQuery替代品快一个数量级,可能比两个或三个快。

jsFiddle
jsPerf