почему removeChild в Javascript всегда удаляет последнего потомка, а не того, от которого он получил идентификатор? - PullRequest
0 голосов
/ 14 августа 2011

У меня есть четыре деления с щелчком по EventListener, вызов функции js, которая просто делает следующее:

this.parentNode.removeChild(this);

Я ожидаю, что это удалит div, на который я нажал, но это не так. вместо этого он удаляет последнего потомка и изменяет идентификатор, указанный после, на идентификатор удаленного дочернего элемента (первый щелчок, последний дочерний элемент) и, нажав далее другие divs отсчитывает данный идентификатор до одного. удаление childNode в массиве от последнего к первому.

я перепробовал много вариантов, например

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

или

parent =document.getElementById('parentElementName');

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

parent.removeChild(to_be_removed);

или с дочерними узлами // 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';

или

Ответы [ 2 ]

1 голос
/ 14 августа 2011

Удалось переделать то, что вы хотели, перейдите на http://jsfiddle.net/6YHcv/, чтобы проверить это.Это то, что вам нужно?

Если вы используете IE и используете attachEvent, this в обработчике событий, вероятно, будет ссылаться на глобальный объект, а не на ваш элемент.В противном случае я не могу сказать, почему ваш код не работает.

0 голосов
/ 14 августа 2011

Я вижу несколько опечаток в вашем коде. Ваш второй пример должен работать просто отлично, я думаю (см. Комментарии):

// 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.

...