2016-11-15 5 views
0

(「値」に関するいくつかの基本的な質問に答えることができないため - 目的を書き直しました。正しい順序で行を配置していないAjaxを使用したJquery挿入行

このHTMLは出発点です。私が行の 'ボタン'をクリックすると、その行の後に行を挿入したいと思います。その新しい行の内容はajaxコールから来ますが、この質問では、TRの後に "tom、dick or harry"(選択されたものに応じて...)を挿入するだけです。ここで

<table id="xTable" > 

    <thead> 
     ... 
    </thead> 

    <tfoot> 
     ... 
    </tfoot> 

    <tbody> 

     <tr> 
      <td nowrap class="segment" > 
       <div class="btn-group" > 
        <button class="btn btn-default btn-xs dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" > + <span class="caret" ></span></button> 
        <ul class="dropdown-menu segmentList" > 
         <option onclick="insRow('tom')" >tom</option> 
         <option onclick="insRow('dick')" >dick</option> 
         <option onclick="insRow('harry')" >harry</option> 
        </ul> 
       </div> 
       <span class="segmentLabel" >BOB</span> 
      </td> 
     </tr> 


     <tr> 
      <td nowrap class="segment" > 
       <div class="btn-group" > 
        <button class="btn btn-default btn-xs dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" > + <span class="caret" ></span></button> 
        <ul class="dropdown-menu segmentList" > 
         <option onclick="insRow('tom')" >tom</option> 
         <option onclick="insRow('dick')" >dick</option> 
         <option onclick="insRow('harry')" >harry</option> 
        </ul> 
       </div> 
       <span class="segmentLabel" >LISA</span> 
      </td> 
     </tr> 

    </tbody> 

</table> 

は、JSは私が今持っている -

function insRow(i) { 

    var tr = $(this).parents().closest('tr');  
    $('#xTable tbody').append('<tr><td>' + i + </td></tr>').insertAfter(tr); 

}; 

動作しないことをここフィドルだ... https://jsfiddle.net/w95xsd2L/3/

+0

「これ? – epascarello

答えて

2

参照フィドルやるべきこと:あなたのセットアップで間違ってたくさんあるhttps://jsfiddle.net/w95xsd2L/4/

  1. を、一つの問題を一緒に渡していますthisを呼び出すときに明示的に指定することで回避できます機能はinsRow.call(this, ...)です。

  2. parents().closest()を参照する方法はありますが、parents()は必要ありません。

  3. またinsertAfterを必要としないか、別のテーブルルックアップを行うには、単にすでにTRは、あなたがclosest

JSで見つけたにafter()を適用しますが何であるかを

function insRow(i) { 

    var $tr = $(this).closest('tr'); 
    $tr.after('<tr><td>' + i + '</td></tr>'); 

}; 
+0

私は決してありません前にこの構文を見た - それはほとんどすべての例に反して - それが動作することを感謝します。しかし、$(これ)がクリックされた/スライドされた/フォーカスされた要素であるべきではない???それは暗示されていませんか?それを渡して、 ".call"を余分なタイピングのように感じる – jpmyob

+0

'これはモーフィングとトランジションのために決して安全ではありません。新しいJS開発者にとって、 'this'を使って作業するときは明白でなければなりません。この場合、 'call()'関数を使って渡しました。 – BotNet

+0

Thx BotNet、ありがとうございます。 – jpmyob

0

だから私はthisが何であるかを知りません。

var tr = $(this).parents().closest('tr'); 

この行が行っていることは、アイテムのすべての親のリストを取得することです。その後、それはそのリストを通り、trである親を見つける。だから、ネストされたテーブルを持っているなら、それは変なものをやっています。 parents()部分を削除してください。

var tr = $(this).closest('tr'); 

ここで、新しい行を追加している行は、実際にあなたが思っていることを実行していません。

$('#xTable tbody').append(data).insertAfter(tr); 

tbodyに「data」を追加し、tbの後にtbodyを追加すると言っていることです。

あなただけ

tr.after(data); 

または

$(data).insertAfter(tr); 
+0

これらの作業のどちらも... tr.after(data);または$(data).insertAfter(tr); – jpmyob

+0

データは有効なTR要素ですか?コメントの前半で尋ねたように、「これ」は何ですか?私はあなたを助けるための詳細が必要です。私の答えは、 'this'はtrの中にある子要素だと仮定しています。 'data'はテーブル行のhtmlを含む有効な文字列であると仮定します。 – epascarello

+0

それはいい質問です - 私の限られた知識があれば、 "これ"はクリックされたUL要素です...それはTDの子です(正しく理解すれば) - HTMLを表示するためにQを編集しましたinsRow()関数を呼び出します....私は、これが "これ"が何であるかを定義するのに役立つことを願っています。 ULの – jpmyob

関連する問題