Matthias: Anker über JS verwalten

Hallo Forum,

mit nachfolgend aufgeführten JS-Beispiel habe ich einen Link zu einer html-Datei mithilfe der ID des Body-Tags konstruiert - was auch prima funktioniert:

<!--
function tree()
{
var file = '../folder_a/' + document.body.id + '.html';
parent.location.href = [file];
}
//-->

Analog zu diesem Beispiel möchte ich nun gerne Anker verwenden.
Meine bislang ausprobierten Varianten wollten es nicht tun:

<!--
function tree()
{
var file = '../folder_a/' + document.anchors[#].name + '.html';
parent.location.href = [file];
}
//-->

Habe ich etwas übersehen?

Hinzu kommt, dass ich gerne die Links zu den betreffenden html-files über die Anker-Namen im JS zentral verwalten möchte, dazu wäre allerdings die Übergabe des Namens ausgehend vom Anker an das JS entscheident, um eine Zuordnung zu erreichen.

html:

<a name="item1" javascript:tree()">Window 1</a><br>
  <a name="item2" javascript:tree()">Window 2</a><br>
  <a name="item3" javascript:tree()">Window 3</a><br>
  <a name="item4" javascript:tree()">Window 4</a><br>
  .
  .
  .

Ein Umgang mit dem anchor array [#], was sich an spezifischen Positionen orientiert, ist bei bestehender Anwendung leider nicht die Lösung. Insofern stellt sich die Frage: Ist das überhaupt machbar?

Über Eure Überlegungen würde ich mich freuen :-)

So long
Matthias

  1. Hi,

    mit nachfolgend aufgeführten JS-Beispiel habe ich einen Link zu einer html-Datei mithilfe der ID des Body-Tags konstruiert - was auch prima funktioniert:

    function tree()
    {
    var file = '../folder_a/' + document.body.id + '.html';
    parent.location.href = [file];

    Was sollen die eckigen Klammern um file, bevor du es location.href zuweist?
    Damit konstruierst implizit ein Array. Wenn du dieses location.href zuweist, dann funktioniert das nur deshalb, weil dessen toString-Methode in diesem Spezialfall wieder den Inhalt seines einzigen Elementes liefert.

    Analog zu diesem Beispiel möchte ich nun gerne Anker verwenden.
    Meine bislang ausprobierten Varianten wollten es nicht tun:

    function tree()
    {
    var file = '../folder_a/' + document.anchors[#].name + '.html';

    Was soll denn das # hier?
    document.anchors liefert eine NodeList, und auf deren Elemente greift man i.a.R. ueber einen nullbasierten nummerischen Index zu. # ist dazu aber herzlich wenig geeignet.

    Hinzu kommt, dass ich gerne die Links zu den betreffenden html-files über die Anker-Namen im JS zentral verwalten möchte, dazu wäre allerdings die Übergabe des Namens ausgehend vom Anker an das JS entscheident, um eine Zuordnung zu erreichen.

    <a name="item1" javascript:tree()">Window 1</a><br>

    Na dann uebergebe den Inhalt des name-Attributs des aktuellen Objektes halt beim Funktionsaufruf als Parameter.

    Ein Umgang mit dem anchor array [#], was sich an spezifischen Positionen orientiert, ist bei bestehender Anwendung leider nicht die Lösung.

    Deshalb noch mal die Frage: Was wolltest du mit obigem Code und darin enthaltenem, m.E. vollkommen unsinnigem, document.anchors[#] denn ueberhaupt bezwecken?

    Insofern stellt sich die Frage: Ist das überhaupt machbar?

    Mir stellt sich derzeit immer noch die Frage, was hast du eigentlich vor?
    Deine Beschreibung ist mir zu konfus, um das wirklich eindeutig herauslesen zu koennen.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Hi,

      »» mit nachfolgend aufgeführten JS-Beispiel habe ich einen Link zu einer html-Datei mithilfe der ID des Body-Tags konstruiert - was auch prima funktioniert:
      »»
      »» function tree()
      »» {
      »» var file = '../folder_a/' + document.body.id + '.html';
      »» parent.location.href = [file];

      Was sollen die eckigen Klammern um file, bevor du es location.href zuweist?
      Damit konstruierst implizit ein Array. Wenn du dieses location.href zuweist, dann funktioniert das nur deshalb, weil dessen toString-Methode in diesem Spezialfall wieder den Inhalt seines einzigen Elementes liefert.

      Mit diesem Beispiel wollte ich dokumentieren, dass mit der Body-Tag erreicht werden kann, was mir augenblicklich nicht mit dem Anchor-Tag gelingt. Die Frage des Arrays stellte sich an dieser Stelle meiner Ausführung nicht.

      »» Analog zu diesem Beispiel möchte ich nun gerne Anker verwenden.
      »» Meine bislang ausprobierten Varianten wollten es nicht tun:
      »»
      »» function tree()
      »» {
      »» var file = '../folder_a/' + document.anchors[#].name + '.html';

      Was soll denn das # hier?
      document.anchors liefert eine NodeList, und auf deren Elemente greift man i.a.R. ueber einen nullbasierten nummerischen Index zu. # ist dazu aber herzlich wenig geeignet.

      Für Schemata verwendet selfhtml selbt das # , ich verstehe Deiene Einwand nicht.

      »» Hinzu kommt, dass ich gerne die Links zu den betreffenden html-files über die Anker-Namen im JS zentral verwalten möchte, dazu wäre allerdings die Übergabe des Namens ausgehend vom Anker an das JS entscheident, um eine Zuordnung zu erreichen.
      »»
      »»   <a name="item1" javascript:tree()">Window 1</a><br>

      Na dann uebergebe den Inhalt des name-Attributs des aktuellen Objektes halt beim Funktionsaufruf als Parameter.

      Ein Beispiel wäre toll - magst Du Dich dazu auslassen?

      »» Ein Umgang mit dem anchor array [#], was sich an spezifischen Positionen orientiert, ist bei bestehender Anwendung leider nicht die Lösung.

      Deshalb noch mal die Frage: Was wolltest du mit obigem Code und darin enthaltenem, m.E. vollkommen unsinnigem, document.anchors[#] denn ueberhaupt bezwecken?

      Mit dem Anchor-Name möchte ich die Variable fühlen, die den Pfad im JS vollständigen ergänzt, da der Pfad für alle Dokumente identisch ist. Einzig die html-Datei innerhalb des Ordners differiert - siehe Beispiel: var file = '../folder_a/' + document.body.id + '.html'; Das Verknüpfen mit dem Operator erlaubt bei einer <a ID="test" .... die href ../folder_a/test.html - ich verstehe Deine Bemerkung nicht!!

      »» Insofern stellt sich die Frage: Ist das überhaupt machbar?

      Mir stellt sich derzeit immer noch die Frage, was hast du eigentlich vor?
      Deine Beschreibung ist mir zu konfus, um das wirklich eindeutig herauslesen zu koennen.

      siehe Bemerkung zuvor - viele Grüße Matthias

      MfG ChrisB

      1. Hi,

        Mit diesem Beispiel wollte ich dokumentieren, dass mit der Body-Tag erreicht werden kann, was mir augenblicklich nicht mit dem Anchor-Tag gelingt.

        Dass auf die ID des bodys derart zugegriffen werden kann, ist kaum ungewoehnlich.

        Die Frage des Arrays stellte sich an dieser Stelle meiner Ausführung nicht.

        Doch, sie stellt sich - weil die Verwendung der eckigen Klammern an dieser Stelle ziemlich unsinnig ist.
        Und da ich deine Kenntnisse auf dem Gebiet nur an Hand dessen einschaetzen kann, was du also Beispielcode zeigst, ist sie sogar von erheblicher Bedeutung.

        »» var file = '../folder_a/' + document.anchors[#].name + '.html';

        Was soll denn das # hier? [...]
        Für Schemata verwendet selfhtml selbt das # , ich verstehe Deiene Einwand nicht.

        Ja, als erklaerende Schreibweise - aber nicht fuer aktuelle Beispiele, denn das duerfte so kaum lauffaehig sein.
        Woher soll ich also wissen, dass du das explizit so verstanden haben willst - noch dazu, wenn du auch an anderen Stellen Schreibweisen verwendest, die irgendwo zwischen unorthodox und unsinnig einzuordnen sind? (Array-Sache, s.o.)

        »»   <a name="item1" javascript:tree()">Window 1</a><br>

        Na dann uebergebe den Inhalt des name-Attributs des aktuellen Objektes halt beim Funktionsaufruf als Parameter.
        Ein Beispiel wäre toll - magst Du Dich dazu auslassen?

        Wie man Funktionen mit Parameter aufruft und diesen dann auswertet, weisst du? (Nach obigem muss ich ja jetzt wohl selbst bei solchen Basics vorsichtig nachfragen.)

        Und wie man bei einem im HTML-Code notierten Eventhandler-Attribut auf das Element, auf dem der Event feuert, zugreift, ebenfalls?

        Mit dem Anchor-Name möchte ich die Variable fühlen, die den Pfad im JS vollständigen ergänzt, da der Pfad für alle Dokumente identisch ist. Einzig die html-Datei innerhalb des Ordners differiert - siehe Beispiel: var file = '../folder_a/' + document.body.id + '.html'; Das Verknüpfen mit dem Operator erlaubt bei einer <a ID="test" .... die href ../folder_a/test.html - ich verstehe Deine Bemerkung nicht!!

        Was verstehst du an der Bemerkung, dass der Sinn und Zweck hinter deinem Vorhaben bisher so spaerlich erklaert war (und mit so unguenstigen "Beispielen"), dass er sich mir nicht erschliessen wollte, denn nicht?

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. Hi Chris,

          bevor der Schlagabtausch weiter ziellos vollzogen wird. Sei die Frage gestellt, ob Du in der Sachfrage ernsthaft bereit bist, mir mit Deinen profunden Kenntnissen zur Seite stehen zu wollen.
          Bitte beachte, dass mir konsolidierte Kenntnisse im Bereich JS teilweise fehlen, insofern sind nicht alle Ausführung fehlerfrei. Allerdings, so bin ich der Auffassung, darf dieses Forum auch nicht den Anspruch erheben, dass seine Teilnehmer durchweg über einschlägige Kenntisse im Bereich der html-Programmierung verfügen.

          Zur Sache: Um die Verkettung einer großen Zahl von html-Dokumente flexibel zu erreichen. Möchte ich die Möglichkeiten von JS nutzen, um nicht jeden Eintrag in der html explizit (um mal Deine Diktion zu gebrauchen)in der href ausführen zu müssen, denn der Pfad ist für viele betreffende Files identisch. Aus diesem Anlass habe ich den Eventhandler href="javascript:tree()" in der html für die mit Namen versehenden <a> Elemente eingeschaltet, den ich mit der Var file = '../folder_a/' + document.anchors[nummerischer Wert].name + '.html'; im zentral JS beantworten wollte. Mit meinem augenblicklichen Wissensstand schaffe ich es einfach nicht, die Namen des Ankers in die Var file zu übertragen - also in das document.anchors[nummerischer Wert].name - vielleicht ist der Ausdruck nicht angemmessen? Vielleicht gibt es ja auch einen besseren Weg?
          Mir ist zwar bekannt, dass ich in die Klammer des Eventhandler auf der html Seite eine ID nach dem Verfahren href="javascript:tree('itemx')" eintragen kann, die ich in dem JS <!-- function tree(id) für jedes 'itemx'auswerte, doch wollte es mir nicht gelingen, das die Browser darauf anspringen.
          Den Versuch mit den eckigen Klammern habe ich eingangs berichtet, um darzustellen, dass man in diesem Fall den genauen Platz im Arry kennen muss, um dieses Verfahren anzuwenden, was in meinem Fall nicht funktioniert, da unterschiedliche Anker potentiell auf den Var file = '../folder_a/' + document.anchors[nummerischer Wert].name + '.html'; im zentral JS zugreifen sollten. Deshalb war meine Frage, ob ich diesen Effekt mit dem Attribut name  in dem Element <a> und dem korrespondierenden JS anchors überhaupt erreichen kann.

          Ich hoffe den Sachverhalt etwas besser verdeutlicht zu haben. Immerhin möchte ich Dich nicht Deiner Zeit ungebührlich berauben.

          Dir einen Gruß
          Matthias

          1. Hi,

            Zur Sache: Um die Verkettung einer großen Zahl von html-Dokumente flexibel zu erreichen. Möchte ich die Möglichkeiten von JS nutzen, um nicht jeden Eintrag in der html explizit (um mal Deine Diktion zu gebrauchen)in der href ausführen zu müssen, denn der Pfad ist für viele betreffende Files identisch. Aus diesem Anlass habe ich den Eventhandler href="javascript:tree()" in der html für die mit Namen versehenden <a> Elemente eingeschaltet, den ich mit der Var file = '../folder_a/' + document.anchors[nummerischer Wert].name + '.html'; im zentral JS beantworten wollte.

            Laesst sich das nicht ggf. simpler (und ohne aktiviertes JavaScript als verfuegbar vorauszusetzen) erreichen, in dem man einfach die Dokumente in entsprechende Pfade verfrachtet, so dass man einfach relativ zu diesem Pfad verlinken, und damit doch je nach Kontext unterschiedliche Dokumente ansprechen kann ...?

            Mir ist zwar bekannt, dass ich in die Klammer des Eventhandler auf der html Seite eine ID nach dem Verfahren href="javascript:tree('itemx')" eintragen kann, die ich in dem JS <!-- function tree(id) für jedes 'itemx'auswerte, doch wollte es mir nicht gelingen, das die Browser darauf anspringen.

            In wie fern nicht?

            Deshalb war meine Frage, ob ich diesen Effekt mit dem Attribut name  in dem Element <a> und dem korrespondierenden JS anchors überhaupt erreichen kann.

            Den Versuch mit den eckigen Klammern habe ich eingangs berichtet, um darzustellen, dass man in diesem Fall den genauen Platz im Arry kennen muss, um dieses Verfahren anzuwenden,

            Muss man nicht, wenn man auf ein Attribut des Ankers genau an der Stelle zugreift, an der geklickt wird - auf dem Anker.

            was in meinem Fall nicht funktioniert, da unterschiedliche Anker potentiell auf den Var file = '../folder_a/' + document.anchors[nummerischer Wert].name + '.html'; im zentral JS zugreifen sollten. Deshalb war meine Frage, ob ich diesen Effekt mit dem Attribut name  in dem Element <a> und dem korrespondierenden JS anchors überhaupt erreichen kann.

            Mittels this kannst du an Ort und Stelle gleich auf das Element, auf das geklickt wurde zugreifen - also von dieser Position aus bspw. auch gleich this.name als Parameter an deine Funktion uebergeben.

            MfG ChrisB

            --
            „This is the author's opinion, not necessarily that of Starbucks.“