Jquery,如何逃避报价

时间:2011-06-25 00:17:41

标签: jquery utf-8 escaping

我正在使用一个简单的jquery代码,它将HTML代码写入一个标记,然后将此内容放入表单输入

<td class="name_cat" ><span class="name_cat">It&#039;s a &quot;test&quot; </span> (5)</td>

jquery将内容转换为span.name_cat并将其作为It's a "test"返回。 因此,当我将其打印到输入中时,它变为

<input value="It's a "test"" />

您可以想象只显示为It's a,以下双引号将关闭值标记。 在没有在输入中显示utf8代码时保留原始字符串的技巧是什么?

Jquery代码

            $(".edit_cat").click(function(){

            tr = $(this).parents("tr:first");
            id_cat = $(this).attr("id");
            td_name = tr.find(".name_cat");
            span_name = tr.find("span.name_cat").html();
            form = '<form action="/admin/controllers/edit_cat.php" method="post" >'+
                            '<input type="hidden" name="id_cat" value="'+id_cat+'" />'+
                            '<input type="text" name="name_cat" value="'+span_name+'" />'+
                            '<input type="submit" value="save" />'+
                            '</form>';
            td_name.html(form);

            console.log(span_name);


        }
        );

我基本上需要html()不要解码Utf8

5 个答案:

答案 0 :(得分:9)

我相信这应该照顾你。

var span_name = tr.find("span.name_cat").html().replace(/"/g, "&quot;");

示例: http://jsfiddle.net/yzthA/

此外,如果您没有,请不要忘记使用var声明变量。

答案 1 :(得分:5)

您可以按照现在的方式构建表单,但使用jQuery的上下文遍历表单对象

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.js"></script>

<script type="text/javascript">
$(function() {
    $('#go').click(function() { 
        var tester = $('<div></div>').html('It&#039;s a &quot;test&quot;');
        var form = $('<form action="/admin/controllers/edit_cat.php" method="post" >' +
                    '<input type="hidden" name="id_cat" />' +
                    '<input type="text" name="name_cat" />' +
                    '<input type="submit" value="save" />' +
                    '</form>');
        $(':hidden:first', form).attr('value', tester.text());
        $(':text:first', form).attr('value', "Some attribute");

        $('#output').append(form);
    });
});
</script>
<input id="go" type="submit" value="click"/>
<div id="output">
</div>

我在这里做的是将表单html输入包装在jQuery对象中form。然后,您可以使用少用的jQuery形式查询该对象上下文中的项:

  

jQuery(选择器,[上下文])
  selector:包含选择器表达式的字符串
  context:用作上下文的DOM元素,Document或jQuery

编辑:我创建了一个tester对象并将内容设置为您的html示例。然后,当我在隐藏输入中设置值时,我调用.text()来获取非html表示。价值与您期望的相同。

<form action="/admin/controllers/edit_cat.php" method="post">
    <input type="hidden" name="id_cat" value="It's a &quot;test&quot;">
    <input type="text" name="name_cat" value="Some attribute">
    <input type="submit" value="save">
</form>

但是你必须在后端解码这个html。这可能是您能够做到的最好的,因为XML不允许像"\"this\""那样“转义”引号。该规范要求引用像&quot;this&quot;一样进行转义。

答案 2 :(得分:2)

您可以使用此函数对值进行HTML编码:

function htmlEncode(str) {
    var div = document.createElement('div');
    var txt = document.createTextNode(str);
    div.appendChild(txt);
    return div.innerHTML;
}

然后编码任何可以包含引号的值:

span_name = htmlEncode(tr.find("span.name_cat").html());

更好的替代方法可能是使用jQuery构建输入并使用val()方法设置值,然后附加到表单:

var $form = $('<form action="/admin/controllers/edit_cat.php" method="post" />');
var $id_cat_input = $('<input type="hidden" name="id_cat" />');
$id_cat_input.val(id_cat);
$id_cat_input.appendTo($form);

答案 3 :(得分:0)

我将user113716的answer转换为jQuery插件并稍作清理。

&#13;
&#13;
(function($) {
  $.fn.escapeQuotes = function() {
    return this.html().replace(/"/g, '&quot;');
  }
})(jQuery);

var spanValue = $('span').escapeQuotes();
var formTemplate = [
  '<form action="/admin/controllers/edit_cat.php" method="post" >',
    '<input type="text" name="name_cat" value="' + spanValue + '" />',
    '<input type="submit" value="save" />',
  '</form>'
].join('');

$(formTemplate).appendTo('body');
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="name_cat">It&#039;s a &quot;test&quot; </span> (5)
&#13;
&#13;
&#13;

答案 4 :(得分:-1)

您应该将它们转换为html实体或跳过它们。 作为html实体的引用如下所示:“ 用你的编程语言做。不是js。