1

私のページには以下のような表があります。

<table id="tbl" cellpadding="0" cellspacing="0" style="width: 100%">
  <tr>
    <td class="field1s">field1x</td>
    <td class="field2s">field2x</td>
    <td class="field3s">field3x</td>
    <td class="field4s">field4x</td>
    <td class="xx">#</td>
  </tr>
</table>

テーブルには非常に多くの行が含まれています。最後のセル(xx)をクリックすると、行内の他のすべてのテキストが、<input type="text" />対応するテキストを含む対応するクラスを持つように変更されます。また、ユーザーがもう一度クリックxxすると、変更されたテキストで行が更新される場合があります。

私はデータを取得し、すでにいくつかの作業を行いました。

これがフィドルです

4

5 に答える 5

5

私は次のことを提案します:

$('#tbl').on('click','.xx',function() {
    $(this).siblings().each(
        function(){
            // if the td elements contain any input tag
            if ($(this).find('input').length){
                // sets the text content of the tag equal to the value of the input
                $(this).text($(this).find('input').val());
            }
            else {
                // removes the text, appends an input and sets the value to the text-value
                var t = $(this).text();
                $(this).html($('<input />',{'value' : t}).val(t));
            }
        });
});

JSフィドルデモ


@mplungjan(下記)からのコメントに応じて編集:

.text(something)確かに、どのような場合よりも速く、簡単に読む必要があります.text("").append(something)。そして、あなたはテキストではなくhtmlを追加しているので、単に。を使用するさらに多くの理由がありますhtml()

もちろん、彼は正しい。したがって:

$('#tbl').on('click','.xx',function() {
    $(this).siblings().each(
        function(){
            if ($(this).find('input').length){
                $(this).text($(this).find('input').val());
            }
            else {
                var t = $(this).text();
                $(this).html($('<input />',{'value' : t}).val(t));
            }
        });
});

JSフィドルデモ

参照:

于 2012-06-02T13:13:21.973 に答える
1

これは、物事を説明するコメント付きのjsfiddleの動作です。

http://jsfiddle.net/767y4/6/

$('#tbl').on('click','.xx',function() {
    // active, means we were in input mode - revert input to td
    if ($(this).hasClass('active')) {
        // go through each input in the table
        $('#tbl input').each(function() {
           // get input text
           var colData = $(this).val();
           // get input class
           var colClass = $(this).attr('class');
           // create td element
           var col = $('<td></td>');
           // fill it with data
           col.addClass(colClass).text(colData);
           // now. replace
           $(this).replaceWith(col);
        });
    } else {
        // go through each column in the table
        $('#tbl td:not(.xx)').each(function() {
           // get column text
           var colData = $(this).text();
           // get column class
           var colClass = $(this).attr('class');
           // create input element
           var input = $('<input />');
           // fill it with data
           input.addClass(colClass).val(colData);
           // now. replace
           $(this).replaceWith(input);
        });

    }



    // give link class active to detect if we are in input mode
    $(this).toggleClass('active');
});
于 2012-06-02T13:04:31.497 に答える
1

これが私のバージョンです-与えられたすべての提案にコメントを続けているので、投稿する必要があると感じました

デモ

$('#tbl .xx').toggle(
  function() {
    $(this).siblings().each(function(){
      var t = $(this).text();
      $(this).html($('<input />',{'value' : t}));
    });
  },
  function() {
    $(this).siblings().each(function(){
      var inp = $(this).find('input');
      if (inp.length){
        $(this).text(inp.val());
      }
    });
  }    
);

フィールドに同じクラスを与えると、次のことができます。

$(".field").each(

それ以外の

$(this).siblings().each(

于 2012-06-03T05:33:39.610 に答える
0

あなたのフィドルによると、あなたはほとんどすべてを大丈夫にしました、あなたはただ使う必要があります

$col1.html('<input type="text" />');

これで、セルの内容が入力フィールドに変更されます。

于 2012-06-02T13:00:38.843 に答える
0

更新しました:

$('#tbl').on('click','.xx',function() {
    $('td').not(':last').each(function(){
      var val = $(this).text()      
      $(this).text('').append("<input type='text' value=" + val + ">")
    })
});

$('td:last').click(function() {
    $(this).toggleClass('xx');
})       

$('td:last').on("click", function(){

$('input').each(function(){
     var tex = $(this).val();
     $(this).replaceWith(tex);
})

})  

http://jsfiddle.net/767y4/10/

于 2012-06-02T13:03:02.217 に答える