PeterRider: suche JS für Greasemonkey, um Links zu entfernen

Hallo an Euch JavaScript-Profis.

Ich hab schon ne Weile gesucht im Internet und ein wenig herumprobiert, aber bekomme es nicht hin(kenne mich aber auch nicht mit JS aus).

Da Greasemonkey ja JS-code ausführt, frag ich daher hier mal.

Ich hätte gerne einen Code, mit dem ich bestimmte Links einer Webseite entfernen kann (oder verstecken sollte auch reichen).

Wenn ich zum Beispiel auf einer Seite folgende Links habe:

http://www.beispiel.de/?inhalt/test-1/linktest1=true
http://www.beispiel.de/?inhalt/test-1/linktest2=true
http://www.beispiel.de/?inhalt/test-2/linktest3=true
http://www.beispiel.de/test-1.php
http://www.beispiel.de/test-2.php
http://www.beispiel.de/test-3.php

Nun würde ich gerne alle Links mit ?inhalt nicht mehr angezeigt bekommen, sondern nur noch die 3 php-Seiten-Links.

Ich hab zwar herausgefunden, dass man mit parentNode.removeChild Elemente von der Webseite entfernen kann, aber ich hab keinen Plan, wie ich das selektiv auf die gewünschten Links abwandeln kann.

Achja, eventuell spielt da ja ne Rolle: die Links werden glaube ich per AJAX eingebunden.

Vielen Dank für Eure hilfe.

  1. Ich hab schon ne Weile gesucht im Internet und ein wenig herumprobiert, aber bekomme es nicht hin(kenne mich aber auch nicht mit JS aus).

    Ohne JS-Kenntnisse wird's aber schwierig.

    Da Greasemonkey ja JS-code ausführt, frag ich daher hier mal.

    Ich hätte gerne einen Code, mit dem ich bestimmte Links einer Webseite entfernen kann (oder verstecken sollte auch reichen).
    Nun würde ich gerne alle Links mit ?inhalt nicht mehr angezeigt bekommen

    Scheint mir eine simple Aufgabe zu sein:
    zunächst durchsuchen wir ein Array, welches alle a-Elemente enthält:

      
    var a_array = document.getElementsByTagName('a');  
    for (var i = 0; i < a_array.length; i++) {
    

    Und schauen nach ob das href-Attribut den term "?inhalt" enthält:
    if(a_array[i].href.match(/.*\?inhalt.*/)) {
    Und mit den entdeckten Elementen machen wir dann "irgendwas" du kannst sie aus dem DOM entfernen, aber weil es einfacher ist blende ich sie mal nur aus:
    a_array[i].style.display = 'none';
    Danach alle offenen Klammern schließen und fertig.

    Komplettes Script:

    // ==UserScript==  
    // @name           Test_a_ohne_info  
    // @namespace      forum.de.selfhtml  
    // @description    blendet alle a-Elemente aus, die ?info im href-Attribut haben.  
    // @include        http://forum.de.selfhtml.org/*  
    // ==/UserScript==  
    var a_array = document.getElementsByTagName('a');  
      
    for (var i = 0; i < a_array.length; i++) {  
     if(a_array[i].href.match(/.*\?info.*/)) {  
      a_array[i].style.display = 'none';  
     }  
    }
    

    Links zum Ausprobieren:
    soll bleiben
    soll weg

    --
    sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
    1. @@Deus Figendi:

      nuqneH

      Scheint mir eine simple Aufgabe zu sein:

      Die du unnötig verkomplizierst.

      zunächst durchsuchen wir ein Array, welches alle a-Elemente enthält:
      var a_array = document.getElementsByTagName('a');

      Nein. Das Durchlaufen des DOMs ist völlig unnötig; solch ein Array existiert bereits: http://de.selfhtml.org/javascript/objekte/links.htm@title=document.links.

      Und schauen nach ob das href-Attribut den term "?inhalt" enthält:
      if(a_array[i].href.match(/.*?inhalt.*/))

      Da sind sie wieder, die zwei Probleme. Die Stringoperation http://de.selfhtml.org/javascript/objekte/string.htm#index_of@title=indexOf tut’s auch.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
    2. Hallo,

      var a_array = document.getElementsByTagName('a');

      dieser Tiefflug durchs DOM ist unnötig; dieselbe Collection gibt's schon fix und fertig als document.links.

      So long,
       Martin

      --
      Moskito, ergo summ.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. @@PeterRider:

    nuqneH

    Wenn ich zum Beispiel auf einer Seite folgende Links habe:
    http://www.beispiel.de/?inhalt/test-1/linktest1=true

    <Gebetsmühle>Verwende für Beispieldomains example.com, example.net, example.org oder auch foo.example, foo.invalid. [RFC2606] NIE Namen angeben, die wirklich existieren (können)! (Man weiß nie, was sich für Inhalt dahinter verbirgt.)</Gebetsmühle>

    Achja, eventuell spielt da ja ne Rolle: die Links werden glaube ich per AJAX eingebunden.

    Glaubst du? Und warum bindest du sie ein, wenn du sie nicht willst?

    Gehe ich recht in der Annahme, dass du irgendeinen Service irgendeines Anbieters nutzt? Wenn ja, hast du dessen Erlaubnis, irgendwelche Links auszublenden?

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. Gehe ich recht in der Annahme, dass du irgendeinen Service irgendeines Anbieters nutzt? Wenn ja, hast du dessen Erlaubnis, irgendwelche Links auszublenden?

      Sag mal Gunnar, warum glaubst du, dass irgendjemand irgendeine Erlaubnis braucht um in seinem eigenen Browser das heruntergeladene DOM zu verändern?
      Ich habe z.B. das Standard-Style-Sheet meines Browsers verändert und ich frage _nicht_ jeden Betreiber einer Website die ich besuche danach ob ich die Seite anders darstellen darf als üblich.
      Ich hab sowas die Tage hier im Forum schonmal gelesen, da meinte jemand ich bräuchte die Erlaubnis um öffentlich zugängliche Daten (mit PHP) herunter zu laden oder so ähnlich.

      Das ist doch alles Humbug, wer Daten ins Netz stellt muss damit rechnen, dass sie genutzt werden. Punkt.
      Wohlbemerkt: Wir reden nicht von Republikation oder sowas. Wir reden auch nicht über XSS im eigentlichen Sinne.

      Ich stehe auf dem Standpunkt: Was auf meiner Hardware passiert darf ich manipulieren wie ich lustig bin und das betrifft auch den Arbeitsspeicher und das Display (was im vorliegenden Beispiel wohl die relevanten Teile sind).

      Wohl aber danke ich dir für deine Verbesserungen an meinem Scriptchen, ein hoch auf Quelloffenheit :) Durch solche lerne ich ganz prima z.B. hätte ich bei so einem Mini-Script früher nicht erst den Array angelegt, sondern jedes Mal die DOM-Operation gemacht, durch dieses Forum und ##javascript (auf Freenode) habe ich gelernt, dass es besser sei es vorher umzukopieren.
      In diesem Sinne auch an alle da draußen von denen ich gehört habe "aber den Code gebe ich nicht frei, das ist mir peinlich der ist so unsauber geschrieben": Es gibt vielleicht Leute die ihn sauber machen!? Wenn er nützlich ist immer her damit :)

      --
      sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
    2. <Gebetsmühle>Verwende für Beispieldomains example.com, example.net, example.org oder auch foo.example, foo.invalid. [RFC2606] NIE Namen angeben, die wirklich existieren (können)! (Man weiß nie, was sich für Inhalt dahinter verbirgt.)</Gebetsmühle>
      Danke für den Hinweis, werde ich mir merken. Und obwohl Du "Gebetsmühle" ranschreibst muss ich gestehen, diesen Hinweis noch nie irgendwo gelesen zu haben. Aber es ist ja auch das erste mal, dass ich hier auf Selfhtml im Forum unterwegs bin.

      Gehe ich recht in der Annahme, dass du irgendeinen Service irgendeines Anbieters nutzt? Wenn ja, hast du dessen Erlaubnis, irgendwelche Links auszublenden?

      Ja, ich will einen Service nutzen und möchte gerne, dass nur die Links die mich auch interessieren angezeigt werden. Links wie "diesen Link dem Admin melden" oder "sende diesen Link an deine Freunde" interessieren mich nicht.