Проблема в том, что вы определяете query
в каждой итерации l oop. Вам нужно определить его снаружи, а затем добавить к нему по мере продвижения l oop.
Аналогично, вам нужно обновить поле '#SQLstring
только после завершения l oop. Значение #SQLstring
для пустого может быть удалено вместе с кодом для извлечения и объединения его значения (которое является избыточным, поскольку первое, что делает l oop, - это пустое значение, поэтому оно всегда пустое). Попробуйте это:
$(".ConvertSQL").click(function() {
var query = "SELECT ";
$(".TableQuery").children("tbody").children("tr").each(function(i) {
var $td = $(this).children("td");
query += "[" + $td.eq(0).html() + "].[" + $td.eq(1).html() + "],";
});
$("#SQLstring").val(query.slice(0, -1)); // slice is used to remove trailing comma
});
input {
width: 300px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="TableQuery">
<tbody>
<tr>
<td>Foo</td>
<td>Bar</td>
</tr>
<tr>
<td>Lorem</td>
<td>Ipsum</td>
</tr>
</tbody>
</table>
<button class="ConvertSQL">Convert SQL</button>
<input type="text" id="SQLstring" />
Сказано, что лучшим подходом было бы использовать map()
для построения массива из значений, которые затем можно join()
собрать вместе , вот так:
$(".ConvertSQL").click(function() {
var query = $('.TableQuery > tbody > tr').map(function() {
var $td = $(this).children('td');
return `[${$td.eq(0).html()}].[${$td.eq(1).html()}]`;
}).get().join(', ');
$("#SQLstring").val(`SELECT ${query}`);
});
input {
width: 300px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="TableQuery">
<tbody>
<tr>
<td>Foo</td>
<td>Bar</td>
</tr>
<tr>
<td>Lorem</td>
<td>Ipsum</td>
</tr>
</tbody>
</table>
<button class="ConvertSQL">Convert SQL</button>
<input type="text" id="SQLstring" />