目前有这样一个表格和一个添加行和删除行的操作
<ul class="c-listUnstyled clearfix p-postion_base">
<li class="u-mt-content">
<a href="#" id="add_btn" name="add_btn" class="p-button_base p-button_type01 p-btn_top-right">加一行</a>
</li>
</ul>
<div class="l-search__results p-postion_leftbtn">
标题
<table id="prize_list" name="prize_list" class="c-table_data_list c-table c-table_fixed u-text-center">
<tbody>
<tr>
<th class="u-text-center c-table_data_list--th u-percent15">第一列</th>
<th class="u-text-center c-table_data_list--th u-percent14">第二列</th>
<th class="u-text-center c-table_data_list--th">第三列</th>
<th class="u-text-center c-table_data_list--th">删除</th>
</tr>
<tr>
<td class="c-table_data_list--td u-text-middle">1</td>
<td class="c-table_data_list--td u-text-middle">
<input class="p-form__input u-w-max p-float_l" type="text" name="" value="">
</td>
<td class="c-table_data_list--td u-text-middle u-text-left">
<input class="p-form__input p-float_l" type="text" name="" value="">
</td>
<td class="c-table_data_list--td u-text-middle">
<a href="#" class="p-button_base--table p-button_type03 delete-row">删除</a>
</td>
</tr>
<tr>
<td class="c-table_data_list--td u-text-middle">2</td>
<td class="c-table_data_list--td u-text-middle">
<input class="p-form__input u-w-max p-float_l" type="text" name="" value="">
</td>
<td class="c-table_data_list--td u-text-middle u-text-left">
<input class="p-form__input p-float_l" type="text" name="" value="">
</td>
<td class="c-table_data_list--td u-text-middle">
<a href="#" class="p-button_base--table p-button_type03 delete-row">删除</a>
</td>
</tr>
<tr>
<td class="c-table_data_list--td u-text-middle">3</td>
<td class="c-table_data_list--td u-text-middle">
<input class="p-form__input u-w-max p-float_l" type="text" name="" value="">
</td>
<td class="c-table_data_list--td u-text-middle u-text-left">
<input class="p-form__input p-float_l" type="text" name="" value="">
</td>
<td class="c-table_data_list--td u-text-middle">
<a href="#" class="p-button_base--table p-button_type03 delete-row">删除</a>
</td>
</tr>
</tbody>
</table>
</div>
tableContainer.addEventListener('click', function(event) {
if (event.target.classList.contains('delete-row')) {
event.preventDefault();
var row = event.target.parentNode.parentNode;
var rankColumn = row.querySelector('.c-table_data_list--td.u-text-middle');
var currentRank = parseInt(rankColumn.textContent);
row.parentNode.removeChild(row);
var remainingRows = tableContainer.querySelectorAll('tr');
for (var i = currentRank - 1; i < remainingRows.length; i++) {
var rankCell = remainingRows[i].querySelector('.c-table_data_list--td.u-text-middle');
rankCell.textContent = i + 1;
}
}
});
addButton.addEventListener('click', function(event) {
event.preventDefault();
var lastRankCell = tableContainer.querySelector('tr:last-child .c-table_data_list--td.u-text-middle');
var lastRank = parseInt(lastRankCell.textContent);
var newRow = createNewRow(lastRank + 1);
table.appendChild(newRow);
});
function createNewRow(rank) {
rankCell.textContent = rank;
return newRow;
}
可能比较乱还请见谅, 这样出现了一个问题,如果想保持第一列的序号排序一致的话,必须全部删除重新添加才可以,如果只是抽调当中几行在添加的话,排序会变得混乱
想询问一下这种情况有无解决的办法,谢谢
删除其中一行后其他行第一列的序号值还是保持从1开始递增,是这个意思吗?
<ul class="c-listUnstyled clearfix p-postion_base">
<li class="u-mt-content">
<a href="#" id="add_btn" name="add_btn" class="p-button_base p-button_type01 p-btn_top-right">加一行</a>
</li>
</ul>
<div class="l-search__results p-postion_leftbtn">
标题
<table id="prize_list" name="prize_list" class="c-table_data_list c-table c-table_fixed u-text-center">
<tbody>
<tr>
<th class="u-text-center c-table_data_list--th u-percent15">第一列</th>
<th class="u-text-center c-table_data_list--th u-percent14">第二列</th>
<th class="u-text-center c-table_data_list--th">第三列</th>
<th class="u-text-center c-table_data_list--th">删除</th>
</tr>
<tr>
<td class="c-table_data_list--td u-text-middle">1</td>
<td class="c-table_data_list--td u-text-middle">
<input class="p-form__input u-w-max p-float_l" type="text" name="" value="">
</td>
<td class="c-table_data_list--td u-text-middle u-text-left">
<input class="p-form__input p-float_l" type="text" name="" value="">
</td>
<td class="c-table_data_list--td u-text-middle">
<a href="#" class="p-button_base--table p-button_type03 delete-row">删除</a>
</td>
</tr>
<tr>
<td class="c-table_data_list--td u-text-middle">2</td>
<td class="c-table_data_list--td u-text-middle">
<input class="p-form__input u-w-max p-float_l" type="text" name="" value="">
</td>
<td class="c-table_data_list--td u-text-middle u-text-left">
<input class="p-form__input p-float_l" type="text" name="" value="">
</td>
<td class="c-table_data_list--td u-text-middle">
<a href="#" class="p-button_base--table p-button_type03 delete-row">删除</a>
</td>
</tr>
<tr>
<td class="c-table_data_list--td u-text-middle">3</td>
<td class="c-table_data_list--td u-text-middle">
<input class="p-form__input u-w-max p-float_l" type="text" name="" value="">
</td>
<td class="c-table_data_list--td u-text-middle u-text-left">
<input class="p-form__input p-float_l" type="text" name="" value="">
</td>
<td class="c-table_data_list--td u-text-middle">
<a href="#" class="p-button_base--table p-button_type03 delete-row">删除</a>
</td>
</tr>
</tbody>
</table>
</div>
<script>
tableContainer = document.getElementById('prize_list')
addButton = document.getElementById('add_btn')
tableContainer.addEventListener('click', function (event) {
if (event.target.classList.contains('delete-row')) {
event.preventDefault();
var row = event.target.parentNode.parentNode;
row.parentNode.removeChild(row);
for (var i = 1; i < tableContainer.rows.length; i++) {
tableContainer.rows[i].cells[0].innerText=i
}
}
});
addButton.addEventListener('click', function (event) {
event.preventDefault();
var newRow = createNewRow();
tableContainer.appendChild(newRow);
});
function createNewRow(rank) {
var tr = document.createElement('tr');
for (var i = 0; i < 4; i++) { var td = document.createElement('td'); tr.appendChild(td) }
tr.cells[0].className = 'c-table_data_list--td u-text-middle'
tr.cells[0].innerHTML = tableContainer.rows.length
tr.cells[1].className = 'c-table_data_list--td u-text-middle'
tr.cells[1].innerHTML = `<input class="p-form__input u-w-max p-float_l" type="text" name="" value="">`
tr.cells[2].className = 'c-table_data_list--td u-text-middle u-text-left'
tr.cells[2].innerHTML = `<input class="p-form__input p-float_l" type="text" name="" value="">`
tr.cells[3].className = 'c-table_data_list--td u-text-middle'
tr.cells[3].innerHTML = `<a href="#" class="p-button_base--table p-button_type03 delete-row">删除</a>`
return tr;
}
</script>
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!想要实现深复制,且实现多层深复制则可以使用递归循环复制。
let obj = {
a:1,
b:2,
c:{
c1:10,
c2:20
}
}
const ReCopy = function (paramter) {
let target = null;
let isObject = paramter.constructor === Object;
let isArray = paramter.constructor === Array;
if (isObject || isArray) {
target = Array.isArray(paramter) ? [] : {};
for (let i in paramter) {
target[i] = ReCopy(paramter[i]);
}
} else {
target = paramter;
}
return target;
}
let objA = ReCopy(obj);
objA.c.c1 = 'c1';
console.log(obj.c.c1); // 10
console.log(objA.c.c1); // 'c1'
针对这个问题,可以采取以下步骤来解决:
代码示例: ```javascript function addRow() { // 自动生成唯一标识符 var id = generateUniqueId();
// 创建新的表格行 var newRow = document.createElement('tr'); newRow.id = id;
// 添加其他表格列 // ...
// 将新行添加到表格中 var table = document.getElementById('myTable'); table.appendChild(newRow); } ```
在删除行时,使用标识符来查找并删除表格行,而不是按照位置删除。
代码示例: javascript function deleteRow(rowId) { var row = document.getElementById(rowId); if (row) { row.parentNode.removeChild(row); } }
更新表格中的序号列。可以在添加和删除行操作之后调用一个函数来重新设置序号。
代码示例: javascript function resetRowNumbers() { var table = document.getElementById('myTable'); var rows = table.getElementsByTagName('tr'); for (var i = 0; i < rows.length; i++) { var numberCell = rows[i].getElementsByTagName('td')[0]; numberCell.textContent = i + 1; } }
在需要添加和删除行的地方调用相应的函数。
代码示例: ```javascript function addOrDeleteRows() { // 添加行 addRow();
// 删除行 deleteRow(rowId);
// 重置序号 resetRowNumbers(); } ```
请注意,以上代码示例仅为演示,具体实现可能需要根据实际情况进行修改和适配。另外,生成唯一标识符的函数 generateUniqueId()
也需要自行实现,可以考虑使用时间戳、GUID等方式来生成唯一标识符。
希望以上解决方案能够帮助您解决问题。如果还有其他问题,欢迎继续提问。