2010-03-31 15 views
5

Wie entferne ich Links von einer Webseite mit JavaScript? Ich verwende Google Chrome. Der Code habe ich versucht, ist:Entfernen Sie Links mit JavaScript im Browser

function removehyperlinks() { 
    try { 
     alert(document.anchors.length); 
     alert(document.getElementsByTagName('a')); 
     for(i=0;i=document.anchors.length;i++) { 
      var a = document.anchors[i]; 
      a.outerHTML = a.innerHTML; 
      var b = document.getElementsByTagName('a'); 
      b[i].outerHTML = b[i].innerHTML; 
     } 
    } catch(e) { alert (e);} 
    alert('done'); 
} 

Natürlich ist dies Code Test, weshalb ich die Warnungen haben und 2 Dinge zur gleichen Zeit versuchen. Die erste Warnung gibt "0" die zweite [Objekt-NodeList] zurück und die dritte gibt "done" zurück.

Mein html Körper sieht wie folgt aus:

<body onload="removehyperlinks()"> 
<ol style="text-align:left;" class="messagelist"> 
    <li class="accesscode"><a href="#">General information, Updates, &amp; Meetings<span class="extnumber">141133#</span></a> 
     <ol> 
      <li><a href="#">...</a></li> 
      <li><a href="#">...</a></li> 
      <li><a href="#">...</a></li> 
      <li><a href="#">...</a></li> 
      <li><a href="#">...</a></li> 
      <li><a href="#">...</a></li> 
      <li><a href="#">...</a></li> 
      <li><a href="#">...</a></li> 
      <li start="77"><a href="#"">...</a></li> 
      <li start="88"><a href="#">...</a></li> 
      <li start="99"><a href="#">...</a></li> 
     </ol> 
    </li> 
    </ol> 
</body> 

Antwort

1
function removehyperlinks() { 
    try { 
     for(i=0;i<document.anchors.length;i++) { 
      document.anchors[i].outerHTML = document.anchors[i].innerHTML 
     } 
    } catch(e) { alert ("try2:" + e);} 
} 
function runner() { 
    for(i=1;document.anchors.length > 0;i++) { 
     //alert('run ' + i + ':' + document.anchors.length); 
     removehyperlinks(); 
    } 
} 

Dies funktioniert. Da ich die Kontrolle über den Inhalt habe, habe ich alle Anker mit einem einfachen Such- und Ersetzungs- "Link" benannt. Wenn Sie es einmal ausführen, nimmt es alle anderen heraus. Also habe ich es einfach wiederholen lassen, bis sie alle raus sind.

+0

Zur Erklärung, es würde nicht in der Ankerliste angezeigt werden, wenn das Attribut name nicht festgelegt wurde. Außerdem ist der Grund, warum es den anderen ausschließt, der, dass, wenn du den ersten löschst, der zweite der erste wird und du zum zweiten gehst, diesen löschst und den dritten ... Du bekommst die Idee. Das habe ich damals nicht verstanden. Was würde gut funktionieren, ist eine while-Schleife. 'While (document.anchors.length> 0) doc.anc [0] .outHTML = doc.anc [0] .inHTML;' –

1

Versuchen

var ary = document.getElementsByTagName("a"); 

die Anker zu erhalten.

Dann können Sie sie entfernen wie diese

for (var i=0;i<ary.length;i++) { 
    // brain cramp: document.removeElement(ary[i]); 
    ary[i].parentNode.removeChild(ary[i]); 
} 
+0

Ich tat (--------) –

+0

@Arien Beller: D'oh! Tut mir leid, ich habe gerade gesehen, dass du versucht hast, document.anchors zu benutzen, was du ohnehin in deiner Schleife verwendest. Dies sollte tun, was Sie wollen, um sie zu finden und zu entfernen, weil das, was Sie haben, nicht durch die Elemente iteriert und selbst wenn es wäre, würde es nur den Textinhalt des Anchor-Tags entfernen, nicht das Element selbst. – Robusto

+0

Ich habe beide alert (document.anchors.length); (0) alert (document.getElementsByTagName ('a')); ([Object NodeList]) –

6

Wenn Sie jquery umfassen können, können Sie es einfach mit

$('document').ready(function(){ 
    $('a').contents().unwrap(); 
});​​​​​​​​​​​​​​​​​ 
+0

Wie kann ich JQuery bekommen und wie benutze ich es? –

+0

@Arlen - http://jquery.com/ Laden Sie die Anweisungen herunter und befolgen Sie sie. –

+0

Sie können auch auf die Google Hosted jQuery-Datei verweisen. http://code.google.com/apis/ajaxlibs/documentation/#jquery Beispiel: Der Vorteil besteht darin, dass der Benutzer, wenn er bereits eine andere Site besucht hat, die auf die freigegebene Datei verweist, wahrscheinlich im Cache des Benutzers ist. –

5

tun können, hier etwas Vanille JS, dass der Trick funktioniert. Alles, was es tut, ist a Tags mit span 's und Kopien über class und id Attribute (wenn sie existieren) zu ersetzen.

var anchors = document.getElementsByTagName("A"); 

for (var i=0; i < anchors.length; i++) { 
    var span = document.createElement("SPAN"); 
    if (anchors[i].className) { 
     span.className = anchors[i].className; 
    } 

    if (anchors[i].id) { 
     span.id = anchors[i].id; 
    } 

    span.innerHTML = anchors[i].innerHTML; 

    anchors[i].parentNode.replaceChild(span, anchors[i]); 
} 
+0

Danke! Nur ein kleiner Kommentar - "i neoswf

+1

'<=' würde einen Array-Fehler außerhalb der Grenzen erzeugen. –

+0

Wenn Sie 3 Anker Kinder haben, wird Ihre Schleife nur zweimal ausgeführt werden – neoswf

Verwandte Themen