在innerHTML中调用javascript函数

时间:2012-08-01 05:46:28

标签: javascript

我创建了一个addRow函数,它允许我向表中添加行。添加行后,我想创建一个删除新行的选项。有没有办法回收我的功能?

function addRow() {
 var table = document.getElementById('dataTable');
 var rowCount = table.rows.length;
 var newRow= table.insertRow((1));
 var c0 = newRow.insertCell
 c0.innerHTML="<div ><img src='include/images/cross.png' alt='delete row' onclick='deleteRow(rowCount)'/></div>";
  }

function deleteRow(row){
 var elem = document.getElementById('tr'+row);
 var old = (elem.parentNode).removeChild(elem);
 }

5 个答案:

答案 0 :(得分:2)

怎么样

onclick='deleteRow(this)'

并且

function deleteRow(img) {
  var thisRow = img.parentNode.parentNode.parentNode; // div..td..tr
  thisRow.parentNode.removeChild(thisRow);
}

答案 1 :(得分:1)

mplungjan 在我之前从技术上回答,但我已经做了一个例子,所以你去了:

function addRow() {
    var table = document.getElementById('dataTable');
    var rowCount = table.rows.length;
    var newRow= table.insertRow();
    var c0 = newRow.insertCell();
    c0.innerHTML="<div><img src='http://0.tqn.com/d/cats/1/0/c/i/3/iStock_AngryCat425x282.jpg' alt='delete row' onclick='imageClick(this)'/></div>";
}

// Function for deleting the parent row of a clicked image
window.imageClick = function(img) {
    img.parentNode.parentNode.removeChild(img.parentNode);
}

实例:http://jsfiddle.net/HPww7/1/

答案 2 :(得分:1)

jQuery允许更清晰,更优雅,更兼容跨浏览器的解决方案:

function addRow() {
    var table = $('#dataTable');
    var newRow = $('<tr><td><div></div></td></tr>');

    // Create an image to place in the new row
    var image = $('<img>')
        .attr('src', 'http://0.tqn.com/d/cats/1/0/c/i/3/iStock_AngryCat425x282.jpg')
        .attr('alt', 'delete row')
        .on('click', function() {
            // Delete parent row on click
            $(this).parents('tr').remove();
        });

    // Append the image to the row and the row to the table
    image.appendTo(newRow);
    newRow.appendTo(table);
}

以下是一个实例:http://jsfiddle.net/HPww7/2/

答案 3 :(得分:0)

可能的解决方案,使用按钮代替图像,并保留对deleteRow函数的表的引用:

<table id='dataTable'></table>
<button onclick='addRow()'>add</button>
<script>
var table = document.getElementById('dataTable');
function addRow() {
 var rowCount = table.rows.length;
 var newRow= table.insertRow(0);
 var c0 = newRow.insertCell();
 var button = document.createElement("button");
 button.innerHTML = "delete";
 button.row = newRow;
 button.addEventListener("click", function(e) {
  deleteRow(this.row);
 })
  c0.appendChild( button );
}

function deleteRow(row){
  table.firstChild.removeChild(row);
}
</script>

答案 4 :(得分:0)

您可以在图片中执行以下操作:

<img onclick="deleteRow(this);" ...>

然后:

function deleteRow(el) {
  var node = el.parentNode;
  while (node && node.tagName.toLowerCase() != 'tr') {
    node = node.parentNode;
  }
  if (node) node.parentNode.removeChild(node);
}

以上允许图像在单元格中的任何位置,它上升到第一个TR祖先并删除它。如果没有,它什么都不做。如果结构发生变化,使用硬编码的父节点字符串将引发错误。