#javascript #html #jquery
#javascript #HTML #jquery
Вопрос:
У меня есть таблица с интерактивной строкой. И строка будет скопирована из одной таблицы в другую при нажатии на строку таблицы.
Когда строка копируется, я хочу прикрепить дополнительный столбец для кнопки удаления.
Я попробовал cloned.appendChild(<кнопка …>), но повсюду были красные линии..
Как я могу это сделать?
<script>
$(document).ready(function($) {
$(".clickable-row").click(function() {
var cloned = $(this).clone();
<!--here I want to attach column to cloned-->
$(cloned).appendTo($("#chosen"));
});
});
</script>
строка будет скопирована из этой таблицы:
<div class="tableFixHead">
<table class="table table-bordered table-sm table-hover">
<thead>
<tr class="thead-light border">
<th>name</th>
<th>difficulty</th>
<th>goal</th>
<th>recommended</th>
<th>return</th>
</tr>
</thead>
<tbody>
{% if quest_list %}
{% for quest in quest_list[:8] %}
<tr class="clickable-row">
<td>{{ quest.name }}</td>
<td>{{ quest.difficulty }}</td>
<td>{{ quest.goal }}</td>
<td>
{% for i in quest_map.query.filter(quest_map.quest_id == quest.id, quest_map.mod == 0).all() %}
{% for j in map_.query.filter(map_.id == i.map_id).all() %}
<p style="line-height: 1; font-size: 14px;">{{ j.name }}</p>
{% endfor %}
{% endfor %}
</td>
<td>
{% for i in quest_map.query.filter(quest_map.quest_id == quest.id, quest_map.mod == 1).all() %}
{% for j in map_.query.filter(map_.id == i.map_id).all() %}
<p style="line-height: 1; font-size: 14px;">{{ j.name }}</p>
{% endfor %}
{% endfor %}
</td>
</tr>
{% endfor %}
{% else %}
<p>error</p>
{% endif %}
</tbody>
</table>
</div>
строка будет скопирована в эту таблицу:
<table class="table table-bordered table-sm table-hover">
<thead>
<tr class="thead-light border">
<th>name</th>
<th>difficulty</th>
<th>goal</th>
<th>recommended</th>
<th>return</th>
</tr>
</thead>
<tbody id="chosen">
<!--rows will be added here-->
</tbody>
</table>
Комментарии:
1. добавьте также структуру таблицы. как вы добавили
2. Вы поместили текст <button …> внутри строки? Вот так:
cloned.appendChild("<button ...>")
3. @ILikeToBeHelpful это создало бы недопустимый HTML
4. Извините, у меня нет большого опыта работы с этой функцией, просто знал, что другие функции используют строку. 🙂
Ответ №1:
Не забудьте делегировать:
$(function() {
$(".clickable-row").on("click", function() {
const $cloned = $(this).clone();
$cloned
.append('<td><button type="button" class="delete">X</button></td>')
.appendTo("#chosen");
});
$("#chosen").on("click", ".delete", function() {
$(this).closest("tr").remove();
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="tableFixHead">
<table class="table table-bordered table-sm table-hover">
<thead>
<tr class="thead-light border">
<th>name</th>
<th>difficulty</th>
<th>goal</th>
<th>recommended</th>
<th>return</th>
</tr>
</thead>
<tbody>
<tr class="clickable-row">
<td>name 1</td>
<td>difficulty 1</td>
<td>goal 1</td>
<td>recommended 1</td>
<td>return 1</td>
</tr>
<tr class="clickable-row">
<td>name 2</td>
<td>difficulty 2</td>
<td>goal 2</td>
<td>recommended 2</td>
<td>return 2</td>
</tr>
<tbody>
</table>
</div>
<hr/>
<table class="table table-bordered table-sm table-hover">
<thead>
<tr class="thead-light border">
<th>name</th>
<th>difficulty</th>
<th>goal</th>
<th>recommended</th>
<th>return</th>
<th>Del</th>
</tr>
</thead>
<tbody id="chosen">
<!--rows will be added here-->
</tbody>
</table>