Sascha321: Link löschen

Hallo

ich möchte mit Javascript einen Link Dynamisch erstellen oder besser gesagt per Onclick, das klappt auch, doch nun möchte ich diesen Link auch wieder entfernen und nur einen Text rein schreiben, das geht irgendwie nicht. Der Text wird dann immer als Link dargestellt, kann man das unterbinden?
Habe mal einen Beispielcode hinzugefügt, ich hoffe ihr versteht mich.

<html>
<head>
 <title>Unbenannt</title>
 <meta name="generator" content="NetAuthor 2.0">   <!-- http://www.bluebelt.de/ -->
</head>

<script type="text/javascript">
<!--

function anzeigen()
     {
         document.getElementById("linkID").href="http://www.google.de";
        document.getElementById("linkID").innerHTML="Link zu Google";
     }

function entfernen()
     {
      document.getElementById("linkID").href="";
        document.getElementById("linkID").innerHTML="kein link";
     }
//-->
</script>

<body>

<form name="test">
<table border="0" width="300">
<tr>
 <td colspan="2" height="50">

<div style="font-size:12px; float:left; padding-left:20px; padding-top:2px"> Programm File = </div>

<a id="linkID"></div></a>
 </td>

</tr>
<tr>
 <td height="50"><input type="BUTTON" value="link anzeigen" onClick="anzeigen()"></td>
 <td><input type="BUTTON" value="link entfernen" onClick="entfernen()"></td>
</tr>

</table>
</form>

</body>
</html>

  1. Hi!

    Ja. Man versteht Dich. Überleg doch mal, was Du machst: Du hast ein <a> Element. (Du nennst es Link) Und schreibst dort mit JS einen Inhalt hinein. Warum sollte es nun plötzlich kein <a> Element mehr sein?

    Was hat eigentlich das Abschlußtag eines Divs dort verloren? Das geht ja mal gar nicht!

    Zu Deinem Problem: Wenn Du das <a> loswerden willst, musst du es auch überschreiben. Für normalen Text bietet dich ein <p> an. Deshalb benutzt du statt innerHTML Knoten (Stichwort DOM) oder du umgibst deinen Link, Text, was immer mit einem anderen Element, das Du ansprichst. Angenommen du möchtest eine Linkliste (Navigation), dann haettest du ein <ul> mit <li> darin. Die lis könnteste du dann mit innerHTML bearbeiten und z.B. Links erstellen oder deaktivieren.

    Einfaches Beispiel einer Navigation:

    <ul>
     <li id='nav1'>aktive Seite</li>
     <li id='nav2'><a>toller Link</a></li>
    </ul>

    function anzeigen()
         {
            document.getElementById("nav1").innerHTML="<a href='http://...'>Link zu Google</a>";
         }

    function entfernen()
         {
            document.getElementById("nav2").innerHTML="kein link";
         }

    Es gibt natürlich x Möglichkeiten soetwas zu erledigen. Nur solltest Du dich nicht wundern wenn ein <a> sich wie eines verhält.

  2. Lieber Sascha321,

    <td colspan="2" height="50">

    <div style="font-size:12px; float:left; padding-left:20px; padding-top:2px"> Programm File = </div>

    <a id="linkID"></div></a>
    </td>

    das machst Du lieber anders! Wenn schon dieses Tabellen-Gedöns, dann so:

    <td colspan="2" height="50">  
        <span style="font-size:12px; float:left; padding-left:20px; padding-top:2px">  
            Program File :  
        </span>  
        <span id="linkID">Text</span>  
    </td>
    

    So. Die Verschachtelung <a></div></a> ist nämlich absoluter Unsinn, da Du kein geöffnetes DIV hattest, und Du solche Querverschachtelungen im Hinblick auf XHTML vermeiden solltest. Auch wenn Du kein XHTML schreibst.

    <script type="text/javascript">
    <!--

    function anzeigen()
         {
             document.getElementById("linkID").href="http://www.google.de";
            document.getElementById("linkID").innerHTML="Link zu Google";
         }

    function entfernen()
         {
          document.getElementById("linkID").href="";
            document.getElementById("linkID").innerHTML="kein link";
         }
    //-->
    </script>

    Die HTML-Kommentare lässt Du bitte bleiben. Notiere stattdessen lieber <!CDATA[ {JavaScript-Code} ]]>, wenn Du XHTML schreibst.

    Nun zu Deinen Funktionen. Da ich den Link selbst in ein <span>-Element gesetzt habe, geht das natürlich mit Deinen originalen Funktionen so nicht mehr. Dafür kannst Du aber schön das <a>-Element erzeugen, um es später wieder zu entfernen. Das geht so:

    function wechseln() {  
        var span = document.getElementById("linkID");  
        var a = span.getElementsByTagName("a");  
        var URL = "http://www.google.com/";  
        var text;  
      
        if (a.length > 0) {  
            // Link vorhanden -> Enfernen!  
            text = a[0].firstChild;  
            span.removeChild(a[0]);  
            span.appendChild(text);  
        } else {  
            // Link nicht vorhanden -> Erzeugen!  
            text = span.firstChild;  
            span.removeChild(text);  
            a = document.createElement("a");  
            a.href = URL;  
            a.appendChild(text);  
            span.appendChild(span);  
        }  
    };
    

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  3. Hallo

    danke für die Antwortet hat mir sehr geholfen.
    Das mit dem Div das da so allein rumstand ist mir auch eben erst aufgefallen, ist ja nich früh am morgen ;-))

    Eine frage noch, kann man mit Javascript auf die zwischenablage von Windows zugreifen? bzw ein Bild aus der Zwischenablage holen?

    Danke

    1. Lieber Sascha321,

      Eine frage noch, kann man mit Javascript auf die zwischenablage von Windows zugreifen? bzw ein Bild aus der Zwischenablage holen?

      das gehört nicht zum standardisierten Umfang von JavaScript (also nach ECMA-Script). Ich meine aber etwas in der Mozilla DOM Reference gelesen zu haben, dass es da wohl etwas gibt. Aber ich habe keinen Link parat. ob es für den IE ähnliche Möglichkeiten gibt, entzieht sich meiner Kenntnis.

      Wenn das Ganze schon stark vom Browser abhängig ist, so ist es sicherlich auch vom Betriebssystem abhängig und somit kaum mehr plattformunabhängig zu realisieren. Aber das weiß ich jetzt wirklich nicht sicher.

      Wichtig für's Googlen ist der englische Begriff für Zwischenablage: Clipboard.

      Liebe Grüße aus Ellwangen,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
      1. Habe etwas gegoogelt und das hier gefunden:

        Für IE (sehr einfach): http://lab.artlung.com/copy-to-clipboard-javascript/

        Für Mozilla (sieht sehr komplex aus): http://www.xulplanet.com/tutorials/mozsdk/clipboard.php

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Hallo,

          Für Mozilla (sieht sehr komplex aus): http://www.xulplanet.com/tutorials/mozsdk/clipboard.php

          Zudem ist dies in Mozilla grundsätzlich deaktiviert und müsste, um vom Benutzer verwendet werden zu können, von diesem erstmal aktiviert werden.

          Gruß

          1. Lieber Daniel,

            Zudem ist dies in Mozilla grundsätzlich deaktiviert und müsste, um vom Benutzer verwendet werden zu können, von diesem erstmal aktiviert werden.

            das habe ich inzwischen auch gelesen. Was denkst Du über eine Lösung mittels Flash, bei der ein Flashfilm onDemand geladen wird, und dem mittels URL-Parameter das Lesen oder Setzen des Clipboard-Inhalts übertragen wird? So wie etwa hier?

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

            --
            ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
            1. Lieber Felix,

              das habe ich inzwischen auch gelesen. Was denkst Du über eine Lösung mittels Flash, bei der ein Flashfilm onDemand geladen wird, und dem mittels URL-Parameter das Lesen oder Setzen des Clipboard-Inhalts übertragen wird? So wie etwa hier?

              Davon halte ich nicht sehr viel, es wäre viel eher praktisch, wenn der Browser ein standardisiertes Verfahren dazu anbieten könnte. Allerdings scheint es sowas nicht zu geben. Und in Mozilla wurde diese Fähigkeit ja als Sicherheitsrisiko eingestuft und daher deaktiviert.

              Gruß

              1. Hallo Daniel, hall Felix,

                das habe ich inzwischen auch gelesen. Was denkst Du über eine Lösung mittels Flash, bei der ein Flashfilm onDemand geladen wird, und dem mittels URL-Parameter das Lesen oder Setzen des Clipboard-Inhalts übertragen wird? So wie etwa hier?

                ja, Flash kann eine enorme Sicherheitslücke darstellen. Eigentlich sollte man Flash deaktivieren. Flash darf anscheinend viel zu viel. Denkt an die gelegentlichen Links auf ein paar Seiten mit dem Überblick, welche Fonts auf den Rechnern der Besucher dieser Seite installiert wären. Ermittelt mit Flash. Eine
                weitere Sicherheitslücke.

                Davon halte ich nicht sehr viel, es wäre viel eher praktisch, wenn der Browser ein standardisiertes Verfahren dazu anbieten könnte. Allerdings scheint es sowas nicht zu geben. Und in Mozilla wurde diese Fähigkeit ja als Sicherheitsrisiko eingestuft und daher deaktiviert.

                Darauf habe ich in dem von mir verlinkten Thread (nicht im verlinkten Posting) immer wieder hingewiesen. Das clipboardData-Objekt ist meiner Meinung nach eine standardmäßig offene Sicherheitslücke im IE, die von mir beschriebene Funktion ist zwar ganz nett - aber wozu gibt es ein Kontextmenü?

                Freundliche Grüße

                Vinzenz

      2. Hallo

        vielen dank für die Antworten, wenn ich das jetzt richtig verstanden habe kann ich mit der Funktion ein Bild in die Zwischenablage(Clipboard) kopieren, aber kann ich es auch wieder raus holen und in eine HTML Seite einfügen??
        Konnte es noch nicht Testen.

        Gruss Sascha

        Lieber Sascha321,

        Eine frage noch, kann man mit Javascript auf die zwischenablage von Windows zugreifen? bzw ein Bild aus der Zwischenablage holen?

        das gehört nicht zum standardisierten Umfang von JavaScript (also nach ECMA-Script). Ich meine aber etwas in der Mozilla DOM Reference gelesen zu haben, dass es da wohl etwas gibt. Aber ich habe keinen Link parat. ob es für den IE ähnliche Möglichkeiten gibt, entzieht sich meiner Kenntnis.

        Wenn das Ganze schon stark vom Browser abhängig ist, so ist es sicherlich auch vom Betriebssystem abhängig und somit kaum mehr plattformunabhängig zu realisieren. Aber das weiß ich jetzt wirklich nicht sicher.

        Wichtig für's Googlen ist der englische Begriff für Zwischenablage: Clipboard.

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        1. Lieber Sascha321,

          vielen dank für die Antworten, wenn ich das jetzt richtig verstanden habe kann ich mit der Funktion ein Bild in die Zwischenablage(Clipboard) kopieren, aber kann ich es auch wieder raus holen und in eine HTML Seite einfügen??

          definiere "in eine HTML Seite einfügen". Dir sollte bewusst sein, dass nur im IE der Zugriff auf das Clipboard möglich ist. In Geckos ist das nur nach geänderten Usereinstellungen möglich! Von anderen Browsern ist mir nichts bekannt (Opera, Safari)...

          Liebe Grüße aus Ellwangen,

          Felix Riesterer.

          --
          ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    2. Hallo Sascha,

      Eine frage noch, kann man mit Javascript auf die zwischenablage von Windows zugreifen? bzw ein Bild aus der Zwischenablage holen?

      Für Bilder und IE, siehe mein Archivbeitrag.

      Freundliche Grüße

      Vinzenz