Вход

Просмотр полной версии : ie7 removeChild убирает не все теги


koroleva.o
14.09.2011, 11:44
Необходимо убрать все теги "<a " со страницы.
Прогон этого скрипта убирает часть тегов

var a = document.getElementsByTagName('a');
for (i=0; i<a.length; i++) {var elem = a[i]; elem.parentNode.removeChild(elem);}

...этот убирает еще парочку

var g = document.getElementsByTagName('A');
for (i=0; i<g.length; i++) {var elem = g[i]; elem.parentNode.removeChild(elem);}


Осталась вот такая запись

..
</FORM><A
..


Чем можно убрать?

Snipe
14.09.2011, 11:48
Осталась вот такая запись

..
</FORM><A
..



Так это не ссылка? Обрывается неожиданно в коде или только тут?

nikita.mmf
14.09.2011, 12:56
Попробуйте вот так

var anchor;
while ( anchor = document.anchors[0] ) {
anchor.parentNode && anchor.parentNode.removeChild( anchor );
}

melky
14.09.2011, 13:09
Попробуйте вот так

var anchor;
while ( anchor = document.anchors[0] ) {
*!*anchor.parentNode &&*/!* anchor.parentNode.removeChild( anchor );
}


когда у ссылки на странице нет родительского элемента ?

и в document.anchors будут якоря, а не ссылки. надеюсь, вы знаете разницу между ссылкой и якорем.

и еще. сказано, что надо удалить все теги А, а не только ссылки или якори.

имхо, можно написать так.


var a = document.getElementsByTagName('a'), b;

while( b = a[0] )
b.parentNode.removeChild( b );

da_ff
15.09.2011, 14:30
Лучше так
var
nodes = document.getElementsByTagName('a'),
nodesInd = nodes.length;
while (nodesInd--) {
nodes[nodesInd].parentNode.removeChild(nodes[nodesInd]);
}
Помоему такая запись понятнее и мы исключаем проблему сдвига индексов просматривая их в обратную сторону.

nikita.mmf
15.09.2011, 15:30
da_ff,
почему так понятнее, самый удачный вариат привел melky, IMHO.

Свойство length лучше не использовать для работы с коллекциями, так как в IE имеется особенность с этим свойством.

da_ff
15.09.2011, 15:49
Вопрос "понятности" достаточно субьективен, но перебор коллекции как правило выглядит именно так.

Свойство length лучше не использовать для работы с коллекциями, так как в IE имеется особенность с этим свойством.
Либо приводите пример кода, где length ведет себя "по-особенному" для коллекции полученной через getElementsByTagName, либо не пишите глупостей.

nikita.mmf
15.09.2011, 16:46
da_ff,
если вы не знаете об этом поведении, это не значит, что я пишу глупости!
http://javascript.ru/forum/misc/19202-rabota-s-ciklom.html#post116045

Riim
15.09.2011, 16:49
если вы не знаете об этом поведении, это не значит, что я пишу глупости!
Работа с циклом for
причем здесь это?

nikita.mmf
15.09.2011, 16:51
Riim,
по ссылке пример, который показывает особенность IE

Riim
15.09.2011, 17:03
nikita.mmf, по-моему нужно просто аккуратней выбирать значения атрибутов name. Хотя хз.

nikita.mmf
15.09.2011, 17:33
Riim,
я согласен, но над сайтом работает обычно большое количество людей и какой-нибудь программист поставит такой name ... А багрепорт по js получает фронтендер, поэтому надо быть заранее готовым к таким вещам

da_ff
15.09.2011, 18:59
nikita.mmf,
Ок, хороший пример, не сталкивался с этой проблемой прежде. Буду теперь учитывать.