2010-07-09 109 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); 
} 

更新按照澄清的功能要求:你這樣想取代與代表的聯繫的原始內容的文本節點的鏈接元素?你可以使用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質量回答 – galambalazs 2010-07-09 23:54:24

+0

我猜測,作者想要保留錨標記的內容(顯示文本,圖像,你有什麼),當刪除鏈接。 – eyelidlessness 2010-07-10 04:40:03

+0

@eye:嗯,這是有道理的。我只是把他們的'href'改成'javascript:void(0)',並添加一個'style',使鏈接看起來像純文本(默認文本顏色,沒有下劃線,默認光標)。 @Matthew:請讓我們知道你*實際*想要什麼。也許我會帶一個代碼示例。 – BalusC 2010-07-10 04:41:36

0

想我會發佈一個remove()函數來補充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')); 
相關問題