Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   ie7 removeChild убирает не все теги (https://javascript.ru/forum/events/21539-ie7-removechild-ubiraet-ne-vse-tegi.html)

koroleva.o 14.09.2011 10:44

ie7 removeChild убирает не все теги
 
Необходимо убрать все теги "<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 10:48

Цитата:

Сообщение от koroleva.o (Сообщение 126398)
Осталась вот такая запись
..
 </FORM><A 
..

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

nikita.mmf 14.09.2011 11:56

Попробуйте вот так
var anchor;
while ( anchor = document.anchors[0] ) {
    anchor.parentNode && anchor.parentNode.removeChild( anchor );
}

melky 14.09.2011 12:09

Цитата:

Сообщение от nikita.mmf (Сообщение 126407)
Попробуйте вот так
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 13:30

Лучше так
var
  nodes = document.getElementsByTagName('a'),
  nodesInd = nodes.length;
while (nodesInd--) {
  nodes[nodesInd].parentNode.removeChild(nodes[nodesInd]);
}

Помоему такая запись понятнее и мы исключаем проблему сдвига индексов просматривая их в обратную сторону.

nikita.mmf 15.09.2011 14:30

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

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

da_ff 15.09.2011 14:49

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

Цитата:

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

nikita.mmf 15.09.2011 15:46

da_ff,
если вы не знаете об этом поведении, это не значит, что я пишу глупости!
http://javascript.ru/forum/misc/1920...tml#post116045

Riim 15.09.2011 15:49

Цитата:

Сообщение от nikita.mmf
если вы не знаете об этом поведении, это не значит, что я пишу глупости!
Работа с циклом for

причем здесь это?

nikita.mmf 15.09.2011 15:51

Riim,
по ссылке пример, который показывает особенность IE

Riim 15.09.2011 16:03

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

nikita.mmf 15.09.2011 16:33

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

da_ff 15.09.2011 17:59

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


Часовой пояс GMT +3, время: 15:59.