使用 javascript 插入带有不规则表的行

Inserting row with irregular table using javascript

提问人:Ben 提问时间:11/13/2023 更新时间:11/14/2023 访问量:41

问:

我有这张表:

<table class="w-full border ">
                    <caption class="text-start mx-2 text-lg font-semibold">
                      A. Specify Modules to be developed or modified:
                    </caption>
                    <tbody>
                      <tr>
                        <th rowspan="3" scope="rowgroup" class="border-black border">1</th>
                        <th scope="row" class="border-black border"><input type="text" placeholder="Module Name" class="placeholder:italic font-normal text-xs w-full p-1" /></th>
                      </tr>
                      <tr>
                        <th scope="row" class="border-black border"><input type="text" placeholder="Module Description" class="placeholder:italic font-normal text-xs w-full p-1" /></th>
                      </tr>
                    </tbody>
</table>

有没有办法通过这个按钮插入一行,其中正在递增并插入:<th rowspan="3" scope="rowgroup" class="border-black border">1</th>

图像

我尝试使用jspreadsheet,但我希望仅使用javascript可以解决问题。

javascript html-table 插入 tailwind-css

评论


答:

1赞 Sahab 11/13/2023 #1

让我们看看如何解决这个问题:

  • 我们有 2 种方法,一种用于添加新的,另一种用于删除行
  • 变量 rowIndex 可用于动态字段 ID (+rowIndex+) 并为每行 +rowIndex+ 提供一个 IDid="moduleName_"id="row_"
  • 我们可以简化表格 html 并为表格主体设置一个 IDid="tableBody"
  • 然后,我们可以根据用户单击“添加更多/删除”来设置和删除表行

var rowIndex = 1;
    const removeRow  = (index) => {
        let  elementToRemove = document.getElementById('row_'+index);
        if (elementToRemove) {
            elementToRemove.remove();
        } else {
            console.log('Element not found.');
        }
    }
    const addNewRow = () => {

        let removeLink = (rowIndex === 1) ? "" : `<a href="javascript:void(0)" onclick="removeRow(`+ rowIndex+`)" >remove</a>`;
        let tableBody = document.getElementById("tableBody");
        let newRow = tableBody.insertRow();
        newRow.id = "row_" + rowIndex;

        let cell1 = newRow.insertCell(0);
        let cell2 = newRow.insertCell(1);

        cell1.innerHTML = `<input type="text" id="moduleName_`+rowIndex+`" placeholder="Module Name" class="placeholder:italic font-normal text-xs w-full p-1" />`;
        cell2.innerHTML = `<input type="text" id="moduleDescription_`+rowIndex+`" placeholder="Module Description" class="placeholder:italic font-normal text-xs w-full p-1" /> `+removeLink;
        tableBody.appendChild(newRow);

        rowIndex++;
    }

    document.addEventListener('DOMContentLoaded', function() {
        addNewRow();
    });
<table class="w-full border">
    <caption class="text-start mx-2 text-lg font-semibold">
        A. Specify Modules to be developed or modified:
    </caption>
    <tbody id="tableBody">
    <tr>
        <th>Module Name</th>
        <th>Module Description</th>
    </tr>
    </tbody>
</table>
<a href="javascript:void(0)" onclick="addNewRow()">Add More</a>

评论

0赞 Ben 11/24/2023
嘿 Sahab,您的这段代码有效,但问题是当我在行上添加输入并单击添加新行时,它会刷新所有内容并且添加的输入将消失,即使在单击添加行后,我如何保留它们?
0赞 Sahab 11/24/2023
嗨,本,给我一些时间,让我来工作吧。会回复你
0赞 Ben 11/24/2023
会的,谢谢!
1赞 Sahab 11/24/2023
我已经更新了以前的答案,请看一下