0

我有四个带有 eventlistener onclick 的 div,调用一个 js 函数,它只执行以下操作:

this.parentNode.removeChild(this);

我希望它删除我点击的 div,但它没有。相反,它会删除最后一个孩子并将之后给出的 id 更改为已删除孩子的 id(第一次单击,最后一个孩子),并通过进一步单击其他 div 将给定的 id 倒数为一个。从最后一个到第一个删除数组中的子节点。

我尝试了很多变种,例如

document.getElementById('parentElementName').removeChild(this.gettAttribute('id'));

或者

parent =document.getElementById('parentElementName');

to_be_removed = document.getElementById(this.gettAttribute('id');

parent.removeChild(to_be_removed);

或使用 childNodes // id = 1,2,3,4

to_be_removed =document.getElementById('box_content').childNodes[this.getAttribute('id')];

parent =document.getElementById('box_content');
    parent.removeChild(to_be_removed);

奇怪的是我可以成功地改变可见性或背景颜色:

document.getElementById('box_content').childNodes[this.getAttribute('id')].style.visibility='hidden';

或者

4

2 回答 2

1

设法重新制作你想要的东西,去http://jsfiddle.net/6YHcv/看看。这是你需要的吗?

如果您在 IE 上并使用attachEventthis则在事件处理程序中可能会引用全局对象,而不是您的元素。否则我不知道为什么你的代码不起作用。

于 2011-08-14T18:16:11.070 回答
0

我在您的代码中看到了一些拼写错误。我认为您的第二个示例应该可以正常工作(请参阅评论):

// make sure this is the parent element's ID and not the name, as this suggests.
    parent = document.getElementById('parentElementName'); 

//note the double 't' in getAttribute; also, you are missing an end bracket
    to_be_removed = document.getElementById(this.gettAttribute('id'); 

//looks good
    parent.removeChild(to_be_removed);

不过,也请查看此示例:jsfiddle

它应该像this.parentNode.removeChild(this)在 onclick 处理程序之后调用函数一样简单。

于 2011-08-14T18:59:03.460 回答