mio212021
@mio212021 (みお)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

tr行を1行追加したい

Discussion

Closed

解決したいこと

Dom操作を習得するためにjQueryでtable動作について触れています。
tr行に対して、td中の追加ボタンをクリックしたらクリックされた行の次の行に、同じ内容の行を1行増やしたいと考えています。

内容はinnerHTMLで置き換えるため、行の増やし方につまづいているのが相談になります。

導入環境

MacOS 12.1
fireFox 95.0.2
jquery-3.6.0.min.js
jquery-ui.min.js
Sortable.min.js"

html

<table id="dataTable" class="table table-hover table_sticky">
                    <thead>
                        <tr class="thColor">
                            <th scope="col" class="border-0" style="width:5%">#</th>
                            <th scope="col" class="border-0" style="width:30%">場所</th>
                            <th scope="col" class="border-0" style="width:30%">内容</th>
                            <th scope="col" class="border-0" style="width:10%">予想時間</th>
                            <th scope="col" class="border-0 text-center" style="width:10%">編集</th>
                            <th scope="col" class="border-0 text-center" style="width:10%">削除</th>
                            <th scope="col" class="border-0 text-center add" style="width:5%"><i class="fas fa-plus-circle"></i></th>
                        </tr>
                    </thead>
                    <tbody id="sortTable">
                        <tr class="bg-white shadow rounded">
                            <td class="listWithHandle" data-name="tenkenNumber" scope="row"></td>
                            <td data-name="tenkenBasho">データ1</td>
                            <td data-name="tenkenNaiyou">あいうえおかきくけこあいうえおかきくけこ</td>
                            <td data-name="tenkenYosoujikan" class="text-right">23</td>
                            <td class="edit text-center"><i class="fas fa-edit"></i></td>
                            <td class="delete text-center"><i class="fas fa-trash-alt"></i></td>
                            <td class="add text-center"><i class="fas fa-plus-circle"></i></td>
                        </tr>
                        <tr class="bg-white shadow rounded">
                            <td class="listWithHandle" data-name="tenkenNumber" scope="row"></td>
                            <td data-name="tenkenBasho">データ2</td>
                            <td data-name="tenkenNaiyou">あいうえおかきくけこあいうえおかきくけこ</td>
                            <td data-name="tenkenYosoujikan" class="text-right">123</td>
                            <td class="edit text-center"><i class="fas fa-edit"></i></td>
                            <td class="delete text-center"><i class="fas fa-trash-alt"></i></td>
                            <td class="add text-center"><i class="fas fa-plus-circle"></i></td>
                        </tr>
                        <tr class="bg-white shadow rounded">
                            <td class="listWithHandle" data-name="tenkenNumber" scope="row"></td>
                            <td data-name="tenkenBasho">データ3</td>
                            <td data-name="tenkenNaiyou">あいうえおかきくけこあいうえおかきくけこ</td>
                            <td data-name="tenkenYosoujikan" class="text-right">123</td>
                            <td class="edit text-center"><i class="fas fa-edit"></i></td>
                            <td class="delete text-center"><i class="fas fa-trash-alt"></i></td>
                            <td class="add text-center"><i class="fas fa-plus-circle"></i></td>
                        </tr>
                        <tr class="bg-white shadow rounded">
                            <td class="listWithHandle" data-name="tenkenNumber" scope="row"></td>
                            <td data-name="tenkenBasho">データ4</td>
                            <td data-name="tenkenNaiyou">あいうえおかきくけこあいうえおかきくけこ</td>
                            <td data-name="tenkenYosoujikan" class="text-right">123</td>
                            <td class="edit text-center"><i class="fas fa-edit"></i></td>
                            <td class="delete text-center"><i class="fas fa-trash-alt"></i></td>
                            <td class="add text-center"><i class="fas fa-plus-circle"></i></td>
                        </tr>
                    </tbody>
                </table>

jQuery

$('.add').on('click',function(){
    var trElem = $(this).parent();
    trElem.clone().insertAfter();
    trElem.className = "bg-white shadow rounded";

自分で試したこと

parentを使うことで、クリックされたtd内容からtr行を参照するということをconsole.logで確認が取れました。
参照しているtrを複製して、次の行に埋め込みたいことからcloneしてinsertAfterで埋め込むようなコードにしています。

参照URL(tr複製後、行追加):
https://maku77.github.io/js/jquery/add-element.html

以下のURlからappend()やafter()でも埋め込みができるとのことでしたので使ってみましたがうまく表示されない状態です。
参照URL(appendやafterについて):
https://teratail.com/questions/38293

0

after()メソッドもinsertAfter()メソッドも同様ですが、引数が必要です。

$A.after(B)=$Aの後にBを挿入する
$A.insertAfter(B)=Bの後に$Aを挿入する

1Like

afterに引数をつけるとデータ内容を編集できることから、以下のようにコードを書きました。

jquery

    $("tbody tr td.add").on('click',function(){
        var trc = $(this).parent().find("td[data-name='tenkenNumber']").text();
        var trData = $("tbody").find("tr").eq(trc-1).clone();
        $("tbody").find("tr").eq(trc-1).after(trData);

お陰様で、Dom操作について理解が深まったと思います。
ありがとうございました。

0Like

Your answer might help someone💌