2011-01-19 9 views
0

私は実際に動作と混同しています。これについて何か助けていただければ幸いです。私はシンプルなテーブルを持っており、同じJQuery呼び出しを使用していても動作が異なります。テーブルJQueryスライスを削除

<table class="PrintTable"> 
    <tr> 
     <td> 
     <table> 
      <thead> 
       <tr><th>Type Of Transaction</th></tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td>Name</td> 
       </tr> 
       <tr> 
        <td>Age</td> 
       </tr> 
      </tbody> 
     </table> 
     </td> 
     <td> 
     <table> 
      <thead> 
       <tr><th>2006</th></tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td>Andi</td> 
       </tr> 
       <tr> 
        <td>25</td> 
       </tr> 
      </tbody> 
     </table> 
     </td> 
     <td> 
     <table> 
      <thead> 
       <tr><th>2007</th></tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td>tom</td> 
       </tr> 
       <tr> 
        <td>26</td> 
       </tr> 
      </tbody> 
     </table> 
     </td> 
    </tr> 
</table><script>$('table.PrintTable >tbody>tr>td').slice(-2).remove();</script> 

上記のJQueryは、最後の2つの列を削除します。

function getBody(element) 
    { 
     var divider=2; 
     var originalTable=element.clone(); 
     var newTable = ($(originalTable).children('tbody').children('tr').children('td')).slice(-1).remove(); 
     return $('<div>').append(newTable).html(); 
    } 

getBoby($('table.PrintTable')) 

上記のコードは唯一の最後の列を表示する - :私は、コードを変更した場合

しかし、。それはなぜそうですか?私は私の問題を適切に言及することができます。どんな助けにもなります

+0

結果をどのようにしたいですか?上記が前のものであると仮定すると、 "after"(または 'getBody'から返信したいもの)を投稿できますか? (また、フィドルで遊ぶことを望む人のために:http://www.jsfiddle.net/bradchristie/8W5Cg/) –

答えて

2

をベースに使用することができ、children()を複数回呼び出す必要はありません、あなたが元の複製をしたいようだが、最後の2つの列なし。 newTableあなたはスライスして削除クローンの部分を参照して、あなたのコードで

function getBody(element) { 
    var divider=2; 
    var newTable = element.clone(); 
    newTable.children('tbody').children('tr').children('td').slice(-2).remove(); 
    return $('<div>').append(newTable).html(); 
} 

getBody($('table.PrintTable')); 

はこれを行います。メインの複製テーブルではありません。

+0

ビンゴ。ありがとう。どのような愚かな間違いをしていた – Nrusingha

+0

@ Nrusingha:あなたは大歓迎です。参考までに、クローンテーブルを挿入する場合(言い換えれば、HTML文字列が本当に必要ない場合)、クローンテーブルを返すことができます。 'return newTable;' – user113716

0

getBody()ファンクションでslide(-1)を使用し、最初のjQueryコールでslice(-2)を使用しているため、短い答えがあります。 slice(-2)は2列を返し、slice(-1)は1列だけを返します。

また、あなたはちょうどあなたのコメントに$element.find('tbody > tr > td');

+0

彼らは最初の呼び出しでそれを行います。私はそれが 'getBody()'を渡しているものと何か関係があるし、 'getBody($( 'table.PrintTable table'))'でなければならないと賭けています(しかし、私は意図した結果を知らない)。 –

+0

@ブラッドクリスティ:それでは、おそらく彼は最初のテーブルの複製を最後の2つの列より少なくしたいと思っていると思います。しかし、スライス(-1)を使用しているため、新しいテーブルの最後の列だけが返されます。多分、スライス(-1)とスライス(-2)は、ここで本当の質問に混乱していました。私は一瞬で私の答えを更新します。 - $( 'table.PrintTable table')を使用したくない場合は、PrintTable内のネストしたテーブルを探していますが、そこにはありますが、この場合はしたくありません。 –

+0

お返事ありがとうございます。あなたは前提が正しい。私は最後の2つの列を使わないでポップアップウィンドウに同じテーブルが必要です。あなたが言及したセレクタは、ネストされたテーブルも調べます。私が言及した最初のシナリオでは、列を適切に削除していますが、次のシナリオではslice(-2).remove()を置いても、削除された列のみが表示されます。 – Nrusingha

関連する問題