Проблема здесь jquery цепочка здесь относится к первому элементу всегда. Вот почему все элементы добавляются только к form
. Чтобы вложить их по отдельности, вам нужно будет называть их индивидуально, например:
var form = $("<form></form>");
var row = $("<div></div>").addClass("row");
var col = $("<div></div>").addClass("col");
col.append("TEST") // Add text node to col first
row.append(col) // add col to row now
form.append(row) // add the row to form now
$('body').append(form) // and finally add the form to body or any parent element you need
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
В форме нескольких добавлений можно использовать строку вместо:
var form = $("<form></form>");
form.append('<div class="row"><div class="col">TEST1</div></div>')
form.append('<div class="row"><div class="col">TEST2</div></div>')
form.append('<div class="row"><div class="col">TEST3</div></div>')
$('body').append(form)
form,.row,.col {margin:5px;padding:5px;border:1px solid #EEE}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Для произошедшего <select>
объекта вы можете использовать:
var form = $("<form></form>");
var divs = '<div class="row"><div class="col"></div></div>';
var selectMark = $("<select/>").attr("id", "mark");
selectMark.append($("<option/>").attr("value", 1).text('--- Select Mark ---'));
form.append(divs).find('.row:last .col').append(selectMark)
var selectModel = $("<select/>").attr("id", "model");
selectModel.append($("<option/>").attr("value", 1).text('--- Select Model ---'));
form.append(divs).find('.row:last .col').append(selectModel)
$('body').append(form)
form,.row,.col,select {margin:5px;padding:5px;border:1px solid #EEE}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>