将 html 单元格转换为文本区域
Converting html cell into text area
嗨,我正在尝试将HTML DOM表转换为文本区域。例如,我在页面上生成了一个包含数据的表格。当用户单击编辑按钮时,各个单元格应转换为文本区域,以便可以对其进行编辑。例如我的代码
function myFunction() {
var table = document.getElementById("myTable");
var row = table.insertRow(-1);
var cell1 = row.insertCell(-1);
var cell2 = row.insertCell(-1);
var cell3 = row.insertCell(-1);
cell1.innerHTML = "data";
cell2.innerHTML = "data";
cell3.innerHTML = "data";
}
谢谢
这应该可以解决问题。
解决方案 1;单击单元格可进行编辑
var table = document.getElementById("myTable");
table.addEventListener('click', function(e) {
var target = e.target;
//test if clicked element is TD.
if (target && target.tagName && target.tagName.toLowerCase() == "td")
{
//make cell editable
target.setAttribute('contenteditable', 'true');
//on blur close the editable field and return to normal cell.
target.onblur = function(){this.removeAttribute('contenteditable');}
}
});
解决方案 2;单击"编辑"可编辑所有单元格
var editBtn = document.getElementById("editbutton") //this is pseudo, change it to reflect your own button
var table = document.getElementById("myTable");
editBtn.addEventListener('click', function(e) {
var tdList = table.querySelectorAll("td"); //select all td elements
for (var i = 0; i < tdList.length; ++i)
{
//iterate over all cells and set contentEditable to true, allows user input.
tdList[i].setAttribute("contentEditable", true);
//if you want textArea you can do this (it's commented out)
//Choose one of these methods, or the contentEditable or textarea
/*
var tempNode = document.createElement("textArea");
tempNode.style.height = "100%";
tempNode.style.width = "100%";
tempNode.style.border= "0px solid transparent";
tempNode.value = tdList[0].textContent;
tdList[i].innerHTML = "";//wipe content of td
tdList[i].appendChild(tempNode);
*/
}
});
当然,保存按钮可以使用相同的循环来迭代所有TD。您可以使用以下内容访问 td/文本区域的值
tdList[i].textContent; //contentEditable
tdList[i].children[0].value; //textarea.
快乐编码。
我在早期项目中使用内容可编辑的 DOM 元素实现了类似的行为。您可以通过以下方式切换该元素的 contenteditable 属性,而不是在用户单击表格单元格时将其转换为文本区域
var table = document.getElementById("myTable");
table.addEventListener('click', function(e) {
var target = e.target;
//test if clicked element is TD.
if (target && target.tagName && target.tagName.toLowerCase() == "td")
{
//make cell editable
target.setAttribute('contenteditable', 'true');
//on blur close the editable field and return to normal cell.
target.onblur = function(){this.removeAttribute('contenteditable');}
}
});
在这里,我假设您的每个表格单元格内部都有一个<div>
。您可以使用 CSS 适当地设置其样式,使其看起来像文本区域。同样,当用户在任何单元格外部单击时,您需要删除先前选择的单元格的 contenteditable 属性,使其再次看起来像常规单元格。希望对您有所帮助!
让你的表格contenteditable
非常简单
var editBtn = document.querySelectorAll("button[class^=edit-]");
function editTable(){
var id = "table-"+this.className.match(/'d+/);
var table = document.getElementById(id);
var ed = table.iseditable^=1;
table[ed?"setAttribute":"removeAttribute"]("contenteditable", true);
this.textContent = ed ? "SAVE" : "EDIT"
}
for(var i=0; i<editBtn.length; i++){
editBtn[i].addEventListener("click", editTable, false);
}
table td{
padding:5px 10px;
background:#eee;
}
table[contenteditable]{
outline: 2px dashed #ad8;
}
<table id="table-1">
<tr><td>Data1</td><td>Data2</td><td>Data3</td></tr>
<tr><td>Data1</td><td>Data2</td><td>Data3</td></tr>
<tr><td>Data1</td><td>Data2</td><td>Data3</td></tr>
<tr><td>Data1</td><td>Data2</td><td>Data3</td></tr>
</table>
<button class="edit-1">EDIT</button>
<table id="table-2">
<tr><td>Data1</td><td>Data2</td><td>Data3</td></tr>
<tr><td>Data1</td><td>Data2</td><td>Data3</td></tr>
<tr><td>Data1</td><td>Data2</td><td>Data3</td></tr>
<tr><td>Data1</td><td>Data2</td><td>Data3</td></tr>
</table>
<button class="edit-2">EDIT</button>
这些按钮具有编号的类。若要检索引用的表 ID,请在 editTable()
函数中检索数字并使用以下命令从类中创建 ID:
var id = "table-"+this.className.match(/'d+/);
而不是使用^=1
切换 HTMLElement 属性,这将做 (1,0,1,0,....
),并用作布尔值,您可以切换您需要的任何内容。属性、文本内容等
相关文章:
- onkeyup无法动态创建多个文本区域
- 具有所有样式的文本正在复制到可编辑文本区域
- 在文本区域POST后解码JSON
- 在文本区域中使用jQuery.text()保持换行符
- ng在下拉列表和文本区域提交
- 将文本插入光标所在的文本区域
- 离开页面导航后保留文本区域内容
- Javascript-在文本区域中断,但不在段落中中断
- 当选择值x时,Javascript需要在正确的位置显示文本区域,从而循环通过具有选择选项的表单
- 测试文本区域中的特定文本格式
- 文本编辑后,append函数不适用于文本区域
- 如何在ReactJs中链接下拉列表和文本区域
- I'我试图在文本区域中进行特定的输入,调用特定的javascript函数,但没有成功;不起作用
- 使用JSON文件中的变量(字符串)填充文本区域
- JavaScript-如果以前不存在文本,如何从文本区域删除新行
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- 如何为动态创建的文本区域中输入的值更新ng模型
- 延迟高亮显示文本区域中的文本
- 将字母添加到文本区域的末尾
- TinyMCE在新添加的文本区域