Проблема в том, что вы вызываете insertBefore()
, который работает именно так, как вам нужно, но затем вы немедленно вызываете append()
, который перемещает строку в конец table
. Чтобы решить вашу проблему, просто удалите вызов append()
.
При этом вы должны заметить, что вы можете сделать свой код гораздо менее подробным, цепочкой вызовов методов и используя appendTo()
и встроенные подписи, где это возможно. Попробуйте это:
function maintest() {
let $table = $('<table>').prop("id", "testTable");
let $row0 = $('<tr>').prop("id", "selectedRow").appendTo($table);
let $cell0 = $('<td>').appendTo($row0);
let $input2 = $("<input>").addClass("input0").appendTo($cell0);
let $cell1 = $('<td>').appendTo($row0);
let $button = $("<button>").addClass('btn').text("Button").click(function() {
let $row1 = $('<tr>').insertBefore($("#selectedRow"));
let $cell2 = $('<td>').appendTo($row1);
let input3 = $("<input>").addClass("input1").appendTo($cell2);
}).appendTo($cell1);
$("#mainDiv").append($table);
}
maintest();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="mainDiv"></div>
Обратите внимание, что это можно еще больше упростить, создав фиктивный контент в DOM и клонируя его при необходимости.