2010-07-09 1 views

ответ

8

You can get all elements by tag name using document.getElementsByTagName(). Все ссылки имеют имя тега a. Вы можете визуально удалить их, установив их стиль display на none.

var elements = document.getElementsByTagName('a'); 
for (var i = 0; i < elements.length; i++) { 
    elements[i].style.display = 'none'; 
} 

Чтобы удалить элементы определенного тега в пределах определенного тега, просто вызовите getElementsByTagName() на элементе. Предположим, что вы хотите, чтобы скрыть все ссылки внутри только <li>:

var listitems = document.getElementsByTagName('li'); 
for (var i = 0; i < listitems.length; i++) { 
    var anchors = listitems[i].getElementsByTagName('a'); 
    for (var j = 0; j < anchors.length; j++) { 
     anchors[j].style.display = 'none'; 
    } 
} 

element.parentNode.removeChild(element) также является хорошим, но он не работает хорошо в стандартной for петли. Вы должны петли обратной:

var elements = document.getElementsByTagName('a'); 
for (var i = elements.length; i-- > 0;) { 
    var element = elements[i]; 
    element.parentNode.removeChild(element); 
} 

Update согласно осветленной функциональное требование: вы таким образом хотите заменить ссылку элемент с помощью текстового узла, представляющего собой оригинальное содержание этой ссылки,? Вы можете использовать для этого Node.replaceChild(). Вот пример стартового:

var elements = document.getElementsByTagName('a'); 
for (var i = elements.length; i-- > 0;) { 
    var element = elements[i]; 
    var text = document.createTextNode(element.firstChild.nodeValue); 
    element.parentNode.replaceChild(text, element); 
} 
+0

+1 качество answer – galambalazs

+0

Я предполагаю, что автор захочет сохранить содержимое якорных тегов (отображать текст, изображения, что у вас есть) при удалении ссылок. – eyelidlessness

+0

@eye: хм, это имеет смысл. Вместо этого я просто изменил их 'href' на' javascript: void (0) 'и добавлю' style', что делает ссылки похожими на обычный текст (цвет текста по умолчанию, без подчеркивания, курсор по умолчанию). @Matthew: сообщите нам, что вы на самом деле хотите. Может быть, я приведу пример кода. – BalusC

0

Мысль я бы разместить функцию удалить(), чтобы дополнить BalusC:

function remove(el){ 
    if(el.parentNode)el.parentNode.removeChild(el); 
} 

Примечание: Если элемент не имеет родителя, это означает, что он не является в дереве DOM. Это также означает, что он будет удален в следующем запуске GC (сборщик мусора) (пока нет ссылок на него).

0

Если вы собираетесь делать много манипуляций с dom, возможно, стоит включить jQuery для захвата ваших элементов. Было бы легче удалить предметы. Например.

$(function(){ 
    $('.surrounding_class a').remove(); 
}); 
0

Если вы хотите удалить ссылки, но сохранить их содержимое дисплея (текст, изображения и т.д.), вы можете вставить их childNodes до ссылки, а затем удалить элементы ссылку:

var removeLinks = function(context) { 
    var undefined; 
    if(context === undefined) { 
     context = document; 
    } 
    if(!context) { 
     return false; 
    } 
    var links = context.getElementsByTagName('a'), i, link, children, j, parent; 
    for(i = 0; i < links.length; i++) { 
     link = links[i]; 
     parent = link.parentNode; 
     if(!link.href) { 
      continue; 
     } 

     children = link.childNodes; 
     for(j = 0; j < children.length; j++) { 
      parent.insertBefore(children[j], link); 
     } 
     parent.removeChild(link); 
    } 
    return context; 
}; 

// Use: 
removeLinks(document.getElementById('container')); 
Смежные вопросы