2010-12-04 3 views
0

私は、要素の内容をいくつかの要素を含む文字列で置き換えるためにjQueryを使用しています。以下、私は$値を作成するために使用しているコードは、文字列:私はjQueryがバックスラッシュ「」文字を文字列に追加するのはなぜですか?

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

:しかし

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

、実際に出力される内容はすべて、それによってバックスペース文字、このように持っていますこれはおそらく私のところでは愚かな間違いだと思っていますが、私が間違っていることを確信していませんか?アドバイスをよろしく!

EDIT

は明確にするために、ここで私は私がのvcardを編集インライン化することができますjEditableのカスタム入力タイプを作成しています、完全なコードです。

$.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'を出力するコードを表示できますか? –

+0

どのように値を出力しますか? – WaiLam

+0

私はjEditableを使用していますので、その機能の一部です。 –

答えて

0

うーん、私は

'<span class=fn>' 

代わりの

'<span class="fn">' 

すなわち、クラス名の前後から引用符を削除するを使用してこの作業を持っているように見えます。何らかの理由で引用符が出力に正しく戻されていますが、複数のクラスを使用することはできません。あなたはスパン内にあるHTMLを設定しようとしている場合

+0

他の何かが苦労していますが、HTML文字列を作成する間に二重引用符を付けることになっています... – kobe

+0

最初のものではなく、働くものでなければなりませんか? –

+0

@yes私たちはあなたの2番目の例のように常に行うべきです、何らかの理由で、最初のように与えるとコードが壊れる可能性があります。 – kobe

0

、それを行うには1つの正しい方法は次のとおりです。

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

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

それとも、完全に要素を置き換える場合または、クラスvcardを削除する場合は、クラスfnを追加して内容を設定します。

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

これは、テキストボックスの値がspan要素に挿入される前にHTMLエスケープされていることを保証します。要素のHTMLコンテンツを設定するのに、.valを使用することは正しくありません。この場合は.htmlを使用してください。

+0

私は彼が '何か'を表示し、それをスパンに置き換えないように入力したいと思うと思います。 – Lukman

+0

あなたの最初のコード例に関しては、好きな方法である '$(" ").class(" fn ")。text($("#fn _ ")。val())' – Agos

0

送信機能がサーバーにデータを送信する前に実行されていることを知っていますか(Jeditableソースを参照)、これはすべての「スパン」がサーバーに送信されることを意味します。サーバー側スクリプト。

乾杯。

関連する問題