添加/删除子元素

时间:2012-09-04 09:46:32

标签: javascript jquery html

我正在使用javascript和jQuery在现有<div>之间动态添加和删除新元素。

添加一个新元素工作正常,但是当我点击'delete'删除元素时,我得到了Main Container对象,并且按钮中的子元素对象也存在并被点击。

现在问题出现在我尝试删除元素时,我得到的对象直到包含控件的html表控件,但是没有得到包含表的div。

注意:div包含的表是子div /元素。

的Javascript

var ab = '<table rules="none" width="100%">'+
'<tr>'+
'<td class="optHdBg">'+
'<a><img src="themes/theme_blog/images/icons/delete.png" name="delete"  önclick="javascript:remove_block(this);"/></a>'+
'</td></tr></table>';

function add()
{
  var lstChild = $("#contControls").children().last();
  var containerElement = document.getElementById("contControls");   
  var newElement = document.createElement("div");
  $(newElement).addClass("optionPane");   
  newElement.innerHTML = ab;
  document.getElementById("contControls").appendChild(newElement);
}

function remove_block(obj)
{
  var mainContainer = $(obj).parents("div #contControls");
  var mySelf = obj.parentNode.parentNode.parentNode.parentNode.parentNode;
  mainContainer.removeChild(mySelf);
}

mySelf控件没有访问包含该表的div控件时出现问题,因为删除操作不起作用。

Html代码

<div id="contControls">
  <div class="optionPane">
    <table rules="none" width="100%">
      <tr>
        <td class="optHdBg">
          <a>
            <img src="themes/theme_blog/images/icons/delete.png" name="delete"  önclick="javascript:remove_block(this);"/>
          </a>
        </td>
      </tr>
    </table>
  </div>
</div>

我无法获得<div>个元素optionPane;每当我尝试定位<table>的父级时,我都会获得ID为<div>的{​​{1}}。

2 个答案:

答案 0 :(得分:1)

Working Demo

如果您遇到导入jQuery的麻烦,您也可以使用它。它简化了您尝试完成的所有DOM操作,并且您的代码简化为此(请注意,javascript字符串不能像您一样跨越多行,而不使用+进行连接< / em>的):

var ab = '<table rules="none" width="100%">'
 + '<tr><td class="optHdBg"><a>'
 + '<img src="themes/theme_blog/images/icons/delete.png" name="delete" />'
 + '</a></td></tr></table>';

$(document).ready(function() {
    $(document).on('click', 'img[name="delete"]', function() {
        remove_block(this);
    });        
});

function add() {
    $("<div class='optionPane'></div>").html( ab ).appendTo("#contControls");
}

function remove_block(obj) {
    // remove the entire optionPane <div>
    $(obj).closest('div.optionPane').remove();
}​

此外,您应该注意,在行$(document).on('click'中,您可以(并且应该)将document替换为您要添加动态元素的任何静态父元素(可能#contControls,但我看不到您的HTML);这提供了更好的性能,因为事件不必在DOM上冒泡。

答案 1 :(得分:0)

试试这个jquery代码

如果您有多个父节点,则在obj

之后添加
$(obj).parent().remove();