Johannes: Verbesserung und Frage zu einem Script

Hi, habe mich drangemacht einen Ticker in JS zu schreiben, die Ausgabe auf einem Layer soll HTML Code interpretieren, da ich aber immer das erste Zeichen hinten dran hänge werden Links auseinandergerissen, schauts euch mal an:

[code]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
<title>Neues Dokument</title>

<script language="Javascript">

Headline = new Array();
Adresse = new Array();

Headline[1] = "Testlink 1";
Headline[2] = "Testlink 2";
Headline[3] = "Testlink 3";

Adresse[1] = "http://www.gamengine.tk";
Adresse[2] = "http://www.gamengine.tk";
Adresse[3] = "http://www.gamengine.tk";

var Trennzeichen = " +++ "

var msg ="<a href='" + Adresse[1] + "' onmouseover='window.clearTimeout(aktiv);' onMouseout='aktiv = window.setTimeout("ticker_move()",100);'>" + Headline[1] + "</a>" + Trennzeichen + "abcdefghijklmnopqrstuvwxyz" + Trennzeichen;

function ticker_move()
{
Testformular.tickertext.value = msg;
document.all["Ebene1"].innerHTML = msg;

msg = msg.substring(1,msg.length)+ msg.substring(0,1);

aktiv = window.setTimeout("ticker_move()",100);
}
</script>
  <style media="screen" type="text/css"><!--
#Ebene1  { background-color: #85ff68; position: absolute; top: 190px; left: 67px; width: 447px; height: 32px; visibility: visible }
--></style>
 </head>
<body onload="ticker_move();">
<form name="Testformular">
<input type="text" name="tickertext" size="24" onmouseover="window.clearTimeout(aktiv);" onMouseout="aktiv = window.setTimeout('ticker_move()',100);">
</form>
  <div id="Ebene1"></div>
 </body>
</html>

[code]

Wie schaffe ich es nun, das die Links immer richtig angezeigt werden.?

Mfg Johannes

  1. Hi,

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">

    [...]

    <script language="Javascript">

    ERROR: Required attribut TYPE missing.

    Wie schaffe ich es nun, das die Links immer richtig angezeigt werden.?

    Indem Du Deinem JavaScript beibringst, HTML zu erkennen, oder aber eine komplexere Datenstruktur aufbaust, welche nicht simpel auf Zeichen basiert.

    Cheatah

    1. Hi,

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
      [...]
      <script language="Javascript">

      ERROR: Required attribut TYPE missing.

      Wie schaffe ich es nun, das die Links immer richtig angezeigt werden.?

      Indem Du Deinem JavaScript beibringst, HTML zu erkennen, oder aber eine komplexere Datenstruktur aufbaust, welche nicht simpel auf Zeichen basiert.

      Cheatah

      Wie bitte soll ich ihn das denn beibringen? Ne Idee? bzw. wie meinst du das mit den Datenstruckturen? Kannst du mir nen Beispiel geben, wie ich das machen kann???

      Mfg Johannes

      1. Hi,

        Wie bitte soll ich ihn das denn beibringen?

        diese Möglichkeit ist eher theoretischer Natur. Ich würde mir selbst kaum zutrauen, das relativ allgemeingültig hinzubekommen (sofern ich nicht mindestens 'ne Woche ausschließlich damit verbringe).

        bzw. wie meinst du das mit den Datenstruckturen?

        Komplexe Objektstruktur, oder aber aus einer Menge voneinander abhängiger (z.B.) Arrays einzelne Elemente zu einem sinnvollen Ergebnis zusammenführen.

        Kannst du mir nen Beispiel geben, wie ich das machen kann???

        Nein. Ein Beispiel wäre quasi eine Lösung - und die wird sicher auch ein, zwei Tage kosten, die ich nicht zur Verfügung habe.

        Cheatah

        1. Nein. Ein Beispiel wäre quasi eine Lösung - und die wird sicher auch ein, zwei Tage kosten, die ich nicht zur Verfügung habe.

          Cheatah

          OK, danke trotzdem, ich dachte auch schon, dass ich da was mit XML machen könnte, aber das wird sicher auch schwierig......

          Mfg Johannes

          1. Hi,

            OK, danke trotzdem, ich dachte auch schon, dass ich da was mit XML machen könnte, aber das wird sicher auch schwierig......

            nun, da HTML auch "nur" ein XML ist - dazu noch ein sehr unsauberes - dürfte diese Variante nicht wesentlich leichter sein...

            Cheatah

      2. Hi Johannes,

        Indem Du ... aber eine komplexere Datenstruktur aufbaust, welche
        nicht simpel auf Zeichen basiert.
        wie meinst du das mit den Datenstruckturen? Kannst du mir nen Beispiel
        geben, wie ich das machen kann???

        Gedankenskizze:

        Ersetze Deinen langen String durch eine Liste von Elementen.
        (ein Array mit zwei Strings pro Komponente würde reichen, oder auch
        zwei Arrays of String, falls das in JavaScript einfacher zu addres-
        sieren ist)
        1. Jedes Element enthält einen String (den darstellbaren Inhalt).
        2. Jedes Element kann zusätzlich einen weiteren String enthalten
           (den Link-URL).
        3. concat(alle Elemente) mit passend einsortierten Links entspricht
           Deinem bisherigen String.

        Durch die Position Deiner Links hast Du die "Sollbruchstellen" Deines
        langen Strings, kannst also zwingend die Elemente herleiten und lücken-
        los aufsteigend durchnumerieren.

        Nun fütterst Du Deinen im aktuellen Tickerdurchgang darzustellenden
        String, d. h. wir machen einen Deiner Schleifendurchgänge.
        Dazu hängst Du nun nicht einfach nur ein Zeichen an irgendwas hinten
        dran, sondern Du mußt darüber Buch führen, wieviele Elemente bereits
        vollständig sichtbar sind - denn das jeweils letzte sichtbare Element
        mußt Du anders behandeln als alle vorherigen.

        Bei jeder Ausgabe in den Ticker kannst Du alle bereits vollständig
        sichtbaren Elemente plus die sie ggf. umgebenden Links in einem Rutsch
        ausgeben - Du kannst diesen Teil-Skript inklusive der Links also
        bereits in fertiger Form in einer Variablen halten, an diesem Teil
        ändert sich bis zum Ende eines Ticker-Durchlaufs nichts mehr.

        Hinter diesen String mußt Du dann das ausgeben, was vom nächsten
        Element sichtbar sein soll, und zwar ggf. eingebettet in dessen (!)
        Link. Dieses Stück Ticker-Inhalt ist nicht wiederverwendbar, weil Du
        beim nächsten Durchgang nichts hinten dran hängen darfst, sondern
        etwas mitten drin einfügen müßtest - da ist es einfacher, wenn Du das
        letzte Stückchen jedesmal neu berechnest und mit seinem Link umhüllst:

        var aktuelles_element = '<a href="' + link[position] + '">
                                  + geklippter_text
                                  + '</a>';

        Dies natürlich nur, falls dieses Element tatsächlich einen Link hat

        • bedenke, daß die Zwischenräume zwischen Deinen Links eben genau
          Elemente ohne Link sein müssen.
          (Weil Du auf diese Weise Links und Zwischenräume systematisch behan-
          delst, hast Du volle Freiheit über den Aufbau Deines Tickers, d. h.
          insbesondere kann auch in den Zwischenräumen beliebiger Text stehen.)

        Sobald dieses Stückchen vollständig sichtbar ist, kannst Du es in
        seiner endgültigen Form an den bereits vorhandenen String mit allen
        vorherigen vollständigen Elementen anhängen - nun ist das nächste
        Element dran, im selben Modus stückchenweise sichtbar zu werden ...

        Viele Spaß beim Programmieren
              Michael