2010-12-04 42 views
0

我正在使用jQuery用一个字符串替换元素的内容,其中包含一些元素。以下是我使用创造价值$的代码,该字符串:为什么jQuery为我的字符串添加反斜杠“”字符?

var value = '<span class="fn">' + $("#fn_").val() + '</span>'; 
$("input", this).val(value); 

然而,究竟是什么被输出具有退格字符的所有通过它,就像这样:

<span class="\&quot;fn\&quot;">Name</span> 

我假设这可能是我的一个愚蠢的错误,但不知道我做错了什么?感谢任何建议!

编辑

为了清楚起见,这里是完整的代码,我创建了jEditable自定义输入类型,让我联编辑的vCard。

$.editable.addInputType('person', { 
element : function(settings, original) {  
    var fn = $('<input id="fn_"/>'); 
    var bday = $('<input id="bday_" />'); 
    var wday = $('<input id="wday_" />'); 
    var dday = $('<input id="dday_" />'); 
    var spouse = $('<input id="spouse_" />'); 

    $(this).append(fn); 
    $(this).append(bday); 
    $(this).append(wday); 
    $(this).append(dday); 
    $(this).append(spouse); 

    /* Hidden input to store value which is submitted to server. */ 
    var hidden = $('<input type="hidden">'); 
    $(this).append(hidden); 
    return(hidden); 
}, 

content : function(string, settings, original) { 
     var $data = $(string); 

     var data = {}; 
     $data.each(function() { 
      var $t = $(this); 
      data[$t.attr('class')] = { 
            class: $t.attr('class'), 
            value: $t.text()}; 
     }); 

     alert(data.length); 

     $("#fn_", this).val('Name'); 
     $("#bday_", this).val('Born'); 
     $("#wday_", this).val('Married'); 
     $("#dday_", this).val('Died'); 
     $("#spouse_", this).val('Spouse'); 
    }, 

    submit: function (settings, original) { 
    var value = "<span class=fn>" + $("#fn_").val() + '</span>' + '<span class=spouse>' + $("#spouse_").val() + '</span>' + '<span class=bday>' + $("#bday_").val() + '</span>' + '<span class=wday>' + $("#wday_").val() + '</span>' +'<span class=dday>' + $("#dday_").val() + '</span>'; 
     $("input", this).val(value); 
    } 

}); 
+0

你可以显示输出`value`的代码吗? – 2010-12-04 16:11:57

+0

你在哪里输出你的价值? – WaiLam 2010-12-04 16:13:33

+0

我使用jEditable,所以它是它的一个功能的一部分。已编辑上面的示例以显示 – 2010-12-04 16:19:03

回答

0

嗯,我好像用

'<span class=fn>' 

代替

'<span class="fn">' 

即来自各地的类名称去掉引号已经得到了这个工作。出于某种原因,报价被正确地放回到输出中,但是我无法使用多个类。

0

如果你想设置的HTML这是一个跨度内,做一个正确的做法是:

.empty().append($('<span class="fn"/>').text($("#fn_").val())) 

或者,如果你想更换全部元素:

.replaceWith($('<span class="fn"/>').text($("#fn_").val())) 

或者如果您只想删除类vcard,请添加类fn,并设置内容:

.removeClass('vcard').addClass('fn').text($("#fn_").val()) 

这可以确保文本框中的值在插入span元素之前已正确地进行HTML转义。使用.val来设置元素的HTML内容是不正确的;对此使用.html,虽然在这种情况下它不是必需的。

0

您是否知道在将数据发送到服务器之前执行您的提交函数(看看Jeditable源代码),这意味着您的所有“跨度”被发送到服务器,所以可能编码您的元素的是你的服务器端脚本。

干杯。