Sebastian: Abfrage auf mehrer <div>s beschränken

Hallo,

ich arbeite gerade an der Anpassung eines Scripts,
welches es ermöglicht dynamisch das Title-Tag von beliebigen Objekten innerhalb des <body>s durch einen Tooltip zu ersetzen.

Einer der Gründe für die Realisierung eines deratigen Scripts ist die lange Verzögerung, bis ein normaler Tooltip das Title-Tag anzeigt.
Mit einem Scipt kann ich das Title-Tag schöner formatieren und kann auch den Zeitpunkt des einblendens genau bestimmen!

Die Idee hatte ich schon lange, doch es schien mir zu kompliziert.
Ich habe nun ein gutes Script gefunden das dies schon ziemlich gut löst.
Ich möchte das Script erst zeigen, wenn es fertig ist.
Auf Wunsch natürlich auch schon vorher!

Ich habe zur Zeit das Problem, dass ich die Tooltips nicht in meinem Menü anzeigen lassen will, bzw. die Anzeige der Tooltips auf bestimmte <div>s eingrenzen möchte.

Ursprünglich sieht ein Teil des Scriptes so aus:
a = document.all ? document.all : getElementsByTagName("*");

Ich habe es etwas geändert:
a = document.all ? document.all : document.getElementById('content').getElementsByTagName("*");

Damit habe ich erreicht, dass nur innerhalb eines <div>s mit der id="content" die Tootltips angezeigt werden.
Nun habe ich aber noch eine Positionsanzeige die <div id="show-position">
heißt, in der ich die Tooltips ebenfalls anzeigen lassen möchte.

Ich habe nun keine Ahnung, wie ich den Code sauber für eine Abfrage auf mehere <div>s erweitern kann.

Kann mir jemand weiterhelfen?

Schöne Grüße aus Bremen,
Sebastian

  1. hi,

    Ich habe es etwas geändert:
    a = document.all ? document.all : document.getElementById('content').getElementsByTagName("*");

    Damit habe ich erreicht, dass nur innerhalb eines <div>s mit der id="content" die Tootltips angezeigt werden.
    Nun habe ich aber noch eine Positionsanzeige die <div id="show-position">
    heißt, in der ich die Tooltips ebenfalls anzeigen lassen möchte.

    ja dann führe das ganze für diesen doch einfach noch mal durch ...?

    kannst du auch eine funktion draus machen, und diese dann in einer schleife mit parametern aus einem array o.ä. aufrufen.

    btw: diese einschränkung gilt natürlich nur, wenn über's DOM gegangen wird - wenn der weg über document.all genommen wird, "selektiert" das ja zunächst mal trotzdem immer noch alle elemente. fängt dein script das ggf. auch ab?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      Ich habe es etwas geändert:
      a = document.all ? document.all : document.getElementById('content').getElementsByTagName("*");

      Damit habe ich erreicht, dass nur innerhalb eines <div>s mit der id="content" die Tootltips angezeigt werden.
      Nun habe ich aber noch eine Positionsanzeige die <div id="show-position">
      heißt, in der ich die Tooltips ebenfalls anzeigen lassen möchte.

      ja dann führe das ganze für diesen doch einfach noch mal durch ...?

      kannst du auch eine funktion draus machen, und diese dann in einer schleife mit parametern aus einem array o.ä. aufrufen.

      btw: diese einschränkung gilt natürlich nur, wenn über's DOM gegangen wird - wenn der weg über document.all genommen wird, "selektiert" das ja zunächst mal trotzdem immer noch alle elemente. fängt dein script das ggf. auch ab?

      Ich verstehe ungefähr was du meinst,
      bin aber nicht in der Lage das umzusetzen.
      Deshalb frage ich ja hier! ;-)
      Ich will nicht etwas das andere meine Arbeit tun, doch komme ich eben nicht weiter.

      Das Script sieht an der beschriebenen Stelle so aus:

      d: function(){

      tooltip.t.setAttribute("id", "tooltip");
        document.body.appendChild(tooltip.t);
      // >>> hier die Abfrage auf id="content"
        a = document.all ? document.all : document.getElementById('content').getElementsByTagName("*");
        aLength = a.length;
        for (var i = 0; i < aLength; i++){

      //if (a[i].tagName == "A" || a[i].tagName == "BUTTON" || (a[i].tagName == "INPUT" && (a[i].type == "submit" || a[i].type == "button" || a[i].type == "reset"))) a[i].onclick = self.focus;
         if (!a[i]) continue;

      tooltip_title = a[i].getAttribute("title");
         tooltip_alt = a[i].getAttribute("alt");
         tooltip_blank = a[i].getAttribute("target") && a[i].getAttribute("target") == "_blank" && tooltip.blank_text;
         if ((tooltip_title || tooltip_blank) && !window.external){
      // executed only if Browsers is not IE (!window.external)
          a[i].setAttribute(tooltip.attr_name, tooltip_blank ? (tooltip_title ? tooltip_title + " " + tooltip.blank_text : tooltip.blank_text) : tooltip_title);
          if (a[i].getAttribute(tooltip.attr_name)){
           a[i].removeAttribute("title");
           if (tooltip_alt && a[i].complete) a[i].removeAttribute("alt");
           tooltip.l(a[i], "mouseover", tooltip.s);
           tooltip.l(a[i], "mouseout", tooltip.h);
          }
         }else if (tooltip_alt && a[i].complete){
          a[i].setAttribute(tooltip.attr_name, tooltip_alt);
          if (a[i].getAttribute(tooltip.attr_name)){
           a[i].removeAttribute("alt");
           tooltip.l(a[i], "mouseover", tooltip.s);
           tooltip.l(a[i], "mouseout", tooltip.h);
          }
         }
         if (!a[i].getAttribute(tooltip.attr_name) && tooltip_blank){
          //
         }
        }
        document.onmousemove = tooltip.m;
        window.onscroll = tooltip.h;
        tooltip.a(-99, -99);
      },

      Wenn document.all zum Einsatz kommt bin ich natürlich aufgeschmissen, da ich nicht weiß, wie ich dann mit der Abfrage auf bestimmte id's umzugehen habe.

      Vielleicht kannst du, oder jemand anders mir ein paar Zeilen Code schencken ;-) der dazu in der Lage ist, das zu bewerkstelligen, was ich möchte, nämlich die Abfrage auf ein paar id's zu begrenzen.

      Freundliche Grüße,
      Sebastian

      1. hi,

        bitte zitiere sinnvoll, und verzichte auf fullquotes.
        </faq/#Q-09a>, </faq/#Q-09b>

        // >>> hier die Abfrage auf id="content"
          a = document.all ? document.all : document.getElementById('content').getElementsByTagName("*");

        wie ich schon sagte - wenn du das für andere elemente als "content" haben willst - dann ersetze halt 'content' an dieser stelle im code durch deren ID.
        der ganze rest muss dann natürlich erneut durchlaufen werden;
        deshalb ja mein vorschlag, es mit einer funktion zu machen, der dann die jeweilige ID übergeben wird.

        Wenn document.all zum Einsatz kommt bin ich natürlich aufgeschmissen, da ich nicht weiß, wie ich dann mit der Abfrage auf bestimmte id's umzugehen habe.

        da wären sicher auch lösungen denkbar - aber ich würde einfach darauf verzichten.
        seit dem IE 5 können eigentlich alle in frage kommenden browser mit den verwendeten DOM-methoden umgehen - document.all wäre also einzig und allein rücksichtnahme auf IEs kleiner 5. wozu? die nutzt kaum jemand mehr - und wenn doch, dann lass das script halt bei dem nichts machen, sondern nur die normalen tooltipps anzeigen.
        für IE < 5 wäre mir der aufwand zu hoch - wenn er's dir nicht ist, müsstest du dich schon intensiver mit javascript beschäftigen.

        Vielleicht kannst du, oder jemand anders mir ein paar Zeilen Code schencken ;-) der dazu in der Lage ist, das zu bewerkstelligen, was ich möchte, nämlich die Abfrage auf ein paar id's zu begrenzen.

        lies dir die verlinkte seite zu funktionen durch, und versuche es umzusetzen.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hallo,

          bitte zitiere sinnvoll, und verzichte auf fullquotes.
          </faq/#Q-09a>, </faq/#Q-09b>

          OK

          Zu deinem Vorschlag mit der Funktion:

          Ich habe nun eine kleine Funktion geschrieben,
          die nicht funktioniert! :-))

          function checkID(){
             var checkid = new Array();
             checkid[0] = document.getElementById('content').getElementsByTagName("*");
             checkid[1] = document.getElementById('show-position').getElementsByTagName("*");
             var divs = checkid.length;
             a = divs.getElementsByTagName("*");
              return a;
            }
          // hier hört meine "Funktion" auf

          // hier möchte ich gerne den Wert von a auslesen,
          // von dem ich leider nicht mal weiß, ob die richtigen Daten enthält
          // man sieht: Der Mann weiß was er tut! ;-)

          var a = checkID();
            aLength = a.length;
            for (var i = 0; i < aLength; i++){

          if (!a[i]) continue;

          tooltip_title = a[i].getAttribute("title");
             tooltip_alt = a[i].getAttribute("alt");
             tooltip_blank = a[i].getAttribute("target") && a[i].getAttribute("target") == "_blank" && tooltip.blank_text;
             if ((tooltip_title || tooltip_blank) && !window.external){
          ...

          Es wäre so schön, wenn javascript Gedanken lesen könnte.
          Dann könnte es verstehen was ich will und würde es auch dementsprechend umsetzen. Das mit den KIs wird wohl noch ne Weile
          dauern und von daher bin ich noch auf die Hilfe von Leuten angewiesen, die es besser können als ich.

          Leider habe ich nicht den ganzen Tag Zeit damit rumzukämpfen.
          Von ist vielleicht jemand so freundlich und sagt mir wo ich
          Fehler gemacht habe.

          Gruß,
          Sebastian

          1. hi,

            function checkID(){
               var checkid = new Array();
               checkid[0] = document.getElementById('content').getElementsByTagName("*");
               checkid[1] = document.getElementById('show-position').getElementsByTagName("*");

            OK, hiermit hast du dir alle elemente, die innerhalb der elemente mit den IDs content und show-position liegen, in zwei arrayelementen abgelegt.

            var divs = checkid.length;

            hier ertmittelst du die anzahl der elemente in deinem array checkid, das dürfte vermutlich 2 ergeben.

            a = divs.getElementsByTagName("*");

            auf die zahl zwei eine methode des documentobjektes anwenden zu wollen, ist wohl kaum sinnvoll.

            Es wäre so schön, wenn javascript Gedanken lesen könnte.
            Dann könnte es verstehen was ich will und würde es auch dementsprechend umsetzen. Das mit den KIs wird wohl noch ne Weile
            dauern

            und deshalb muss man sich immer noch erst selber die gedanken machen, und dann sehen, wie man diese in javascript-synatx umsetzen kann.

            Leider habe ich nicht den ganzen Tag Zeit damit rumzukämpfen.
            Von ist vielleicht jemand so freundlich und sagt mir wo ich
            Fehler gemacht habe.

            siehe oben.
            (fertigen code wirst du hier aber kaum bekommen.)

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Ich muss zugeben,
    meine Rechtschreibung ist heute wirklich mies.

    Nehmt es vielleicht als Anlass für eine erhöhte Aufmerksamkeit! ;-)

    Sebastian

  3. Hi,

    ich arbeite gerade an der Anpassung eines Scripts,
    welches es ermöglicht dynamisch das Title-Tag von beliebigen Objekten innerhalb des <body>s durch einen Tooltip zu ersetzen.

    Wovon redest Du? Ein HTML-Dokument muß genau 2 title-tags enthalten - ein öffnendes und ein schließendes. Beide müssen natürlich im head vorkommen.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.