2012-01-27 4 views
0

ここで何が起こっているのか分かりません。テーブルをクリアする - JQuery

以下の関数は、すべての行を消去してから新しい行を作成する必要がありますが、画面上では一瞬消去されますが、前の行を保持して追加します。

これはappendToの使用によるものですか?行が消去された後にいつ発生するのがなぜ重要なのでしょうか?

テーブルを消去して配列を書き込む別の方法がありますか?

<script type="text/javascript"> 
    function buildrow(){ 
     $("#oatable tbody tr").each(function(){ 
      this.parentNode.removeChild(this); 
       }); 

     $('input:checkbox:checked').each(function() { 
       var idtofind = ($(this).attr('id')); 
       //alert(idtofind); 
       //alert(idtofind);   
       //Hide Content (this is sloppy but easy to customize..) 
       //$(wrapper).hide(); 
       //('This is the first ' + idtofind);  
       //Get XML Data 
       $.ajax({ 
       type: "GET", 
       url: "xml/OA.xml", 
       dataType: "xml", 
       success: function(xml) { 
        var tablediv = $('div#table'); 
        var xmlArr = []; 
        $(xml).find('OAData').each(function(){ 
               if($(this).attr('OAval')===idtofind) { 
          //alert('This is the next ' + idtofind); 
         var xml_OAval   = $(this).attr('OAval'); 
         var xml_OAid   = $(this).find('OAid').text(); 
         var xml_BAC_Level_1   = $(this).find('BAC_Level_1').text(); 
         var xml_Basel_Level_1  = $(this).find('Basel_Level_1').text(); 
         var xml_Basel_Level_2  = $(this).find('Basel_Level_2').text(); 
         var xml_Risk_Category_Level_3 = $(this).find('Risk_Category_Level_3').text(); 
         var xml_GTO_Library_Ref_ID = $(this).find('GTO_Library_Ref_ID').text(); 
         var xml_Ent_Lib_Ref_ID  = $(this).find('Ent_Lib_Ref_ID').text(); 
         var xml_Name   = $(this).find('Name').text(); 
         var xml_Description  = $(this).find('Description').text(); 
         var xml_Potential_Risk_Event = $(this).find('Potential_Risk_Event').text(); 
         var xml_Cause   = $(this).find('Cause').text(); 
         var xml_GTO_Library  = $(this).find('GTO_Library').text(); 
         var xml_Comments  = $(this).find('Comments').text(); 
         // Add matched items to an array 
         xmlArr += '<tr><td>'; 
         xmlArr += xml_OAid; 
         xmlArr += '</td><td>'; 
         xmlArr += xml_BAC_Level_1; 
         xmlArr += '</td><td>'; 
         xmlArr += xml_Basel_Level_1; 
         xmlArr += '</td><td>'; 
         xmlArr += xml_Basel_Level_2; 
         xmlArr += '</td><td>'; 
         xmlArr += xml_Risk_Category_Level_3; 
         xmlArr += '</td><td>'; 
         xmlArr += xml_GTO_Library_Ref_ID; 
         xmlArr += '</td><td>'; 
         xmlArr += xml_Ent_Lib_Ref_ID; 
         xmlArr += '</td><td>'; 
         xmlArr += xml_Name; 
         xmlArr += '</td><td>'; 
         xmlArr += xml_Description; 
         xmlArr += '</td><td>'; 
         xmlArr += xml_Potential_Risk_Event; 
         xmlArr += '</td><td>'; 
         xmlArr += xml_Cause; 
         xmlArr += '</td><td>'; 
         xmlArr += xml_GTO_Library; 
         xmlArr += '</td><td>'; 
         xmlArr += xml_Comments; 
         xmlArr += '</td></tr>'; 

         //alert(xmlArr); 
         } 
         }); // end each loop 

        //Append array to table (this way is much faster than doing this individually for each item) 
        //alert(xmlArr) 
      $(xmlArr).appendTo("tbody#oa"); 
     } // end post AJAX call operaitons 
     }); // end AJAX 
      } 

    ); 
    } 
    </script> 
+0

あなたは[JSフィドル](http://jsfiddle.net/)デモを使用して問題を再現することはできますか? –

+0

ほとんどすべてのjquery関数は、一致するセット内のすべての要素に対して機能するので、一致するセットに対して$ .eachを使用することはほとんどありません(関数型プログラミングを行う場合、配列やオブジェクトに対してはるかに役立ちます)あなたがレールから外れる可能性があるかどうかを確認するための親指。 –

+0

@DavidThomas JS Fiddle内のXMLソースファイルの使用方法についてはっきりしていません – ChadM

答えて

4

このコードを使用tabletbodyからすべての行を削除します。

$("#oatable tbody tr").remove(); 

.remove()参照:あなたは配列としてxmlArrを定義しているとあなたがcorerctではありませんそれに文字列を連結している、あなたのajax成功ハンドラでhttp://api.jquery.com/remove/

。文字列を追加するにはpushメソッドを使用します。

success: function(xml) { 
    var tablediv = $('div#table'); 
    var xmlArr = []; 
    .... 
    .... 
    //xmlArr += '<tr><td>'; 
    //use push method 
    xmlArr.push('<tr><td>'); 
    .... 
    ....      
    .... 
    xmlArr.push('</td></tr>'); 
    .... 
    .... 



    //Finally use xmlArr.join('') to get the combined string 
    $(xmlArr.join('')).appendTo("tbody#oa"); 

} 
+0

.remove()は機能しませんでしたが、データはクリアされていないかのように前のデータに追加されました。 – ChadM

+0

そのコード行は行全体を削除し、行内の内容は消去しません。 '.remove();'は、指定された要素を削除します。 –

+1

私はそれがOPが探しているものだと思った。 OPはtdの 'html'を設定するだけでなく、' tr/td 'で新しい行を作成しています。 – ShankarSangoli

0

は、上記の答えはあなたがテーブルから明らかするかどうかのデータを求めているが、右方向にあるこの

$("#oatable tbody").html(""); 

$("tbody#oa").html($(xmlArr)); 
+0

何らかの理由で.htmlセレクタが私のためにまったく機能しませんでした。私はちょうどあなたが示唆したようにこれを置き換えて、テーブルは空白/エラー/何も実行されていない場合のように – ChadM

+0

このpagによるとhttp://api.jquery.com/text/ '.html();' xmlで作業します。 '.text()'はxmlとhtmlの両方で使うことができます。 –

+0

問題が見つかりました - 馬鹿OP(私)は、チェックボックスを含むdivを空にできませんでしたので、新しいカテゴリが選択されるたびに、より多くのチェックボックスがdivに書き込まれました。あなたが提供したコードはここで働いていましたが、作成してはならないチェックボックスのカスケードに対して実行していた問題でした。 ご協力いただきありがとうございます。 – ChadM

2

については、この

$("#oatable tbody tr").each(function(){ 
     this.parentNode.removeChild(this); 
      }); 

$(xmlArr).appendTo("tbody#oa")  

を交換してみてください。私の視点では、次のようにすることをお勧めします。

$("#oatable tbody tr td").html(""); 

これは、テーブルの各要素からすべてのデータをクリアします。

よろしくと幸運、

+0

それはちょうど最初の行をクリアしている - 私はjsfiddleでこれを得ることができるかどうかを調べるつもりだ – ChadM

+0

奇妙な。私は$( "table td")を使ってすべての行をクリアしていることを示す小さなテストを行った。 –

+0

ソースhttp://mdihosting.com/5/Projects/VRACC/index3.html - 私はこれで作業していますので、継続的に更新されていますが、あなたがファイヤーバグで見ると、それが何を返すのかがわかります。 – ChadM

0
if tbody is there : 
    $("#tablename tbody tr").remove(); 
else: 
    $("#tablename tr").remove(); 
関連する問題