Alex: Texte verschieben von doc.b.innerHTML

Guten Tag liebe Com.

Ich übe mich zur Zeit in Javascript.
Ich habe ein Script geschrieben und wird auch alles ausgegeben auf der Homepage, jedoch wird alles am Ende der HP ausgegeben.

Ich brauch das aber ganz oben, sprich direkt unter dem Body.

document.body.innerHTML += 'Spieler nicht aktiv: ' + gesamt + '<br> Davon ' + i + ' im Urlaub und ' + inaktiv + ' inaktiv';

Kann mir da jemand helfen?

Lg

  1. Kann mir da jemand helfen?

    Mach dich kundig, was der +=-Operator tut :)

    1. Kann mir da jemand helfen?

      Mach dich kundig, was der +=-Operator tut :)

      Also Google zeigt mir die Operatoren Funktion an sich ^^ Sprich addieren etc. :/

      1. Kann mir da jemand helfen?

        Mach dich kundig, was der +=-Operator tut :)

        Also Google zeigt mir die Operatoren Funktion an sich ^^ Sprich addieren etc. :/

        In SELFHTML stehts auch - allerdings nur für <http://de.selfhtml.org/javascript/sprache/operatoren.htm@title=mathematische Operationen> - mit strings ist es aber dasselbe

        Zahl += 3; ist eine Abkürzung für Zahl = Zahl + 3;

        In deinem Kontext heisst das:

        String += 'foo';
        ist dasselbe wie
        String = String + 'foo';

        Womit erklärt sein dürfte, warum in deinem Fall dein Zeug _hinter_ dem Rest steht und nicht wie von dir gewünscht _davor_.

        1. In deinem Kontext heisst das:

          String += 'foo';
          ist dasselbe wie
          String = String + 'foo';

          Womit erklärt sein dürfte, warum in deinem Fall dein Zeug _hinter_ dem Rest steht und nicht wie von dir gewünscht _davor_.

          Das ist mir klar :p
          Ich glaube wir reden einfach gerade aneinander vorbei, oder ich bin wirklich zu blöd ..

          Meine Ausgabe "Spieler nicht aktiv" ... usw. führe ich mit Greasemonkey aus und diese Ausgabe steht immer ganz unten bei jeder Homepage.
          Ich will aber, dass diese Ausgabe immer ganz oben steht.

          Z.b. hier auf der HP wo ich gerade antworten kann, sollte meine Ausgabe über dem "SELFHTML Forum" stehen. Diese steht jedoch unter dem Impressum.

          1. Das ist mir klar :p

            Anscheinend nicht :)

            Ich glaube wir reden einfach gerade aneinander vorbei, oder ich bin wirklich zu blöd ..

            Lies einfach meinen vorherigen Beitrag noch einmal :)

            Meine Ausgabe "Spieler nicht aktiv" ... usw. führe ich mit Greasemonkey aus und diese Ausgabe steht immer ganz unten bei jeder Homepage.
            Ich will aber, dass diese Ausgabe immer ganz oben steht.

            Sag' ich doch - und wenn du den Inhalt des Body-Elements mit innerHTML nimmst und an diese deine Ausgabe anhängst (das macht, wie wir schon festgestellt haben +=), steht diese natürlich "ganz unten".

            1. Das ist mir klar :p

              Anscheinend nicht :)

              Ich glaube wir reden einfach gerade aneinander vorbei, oder ich bin wirklich zu blöd ..

              Lies einfach meinen vorherigen Beitrag noch einmal :)

              Meine Ausgabe "Spieler nicht aktiv" ... usw. führe ich mit Greasemonkey aus und diese Ausgabe steht immer ganz unten bei jeder Homepage.
              Ich will aber, dass diese Ausgabe immer ganz oben steht.

              Sag' ich doch - und wenn du den Inhalt des Body-Elements mit innerHTML nimmst und an diese deine Ausgabe anhängst (das macht, wie wir schon festgestellt haben +=), steht diese natürlich "ganz unten".

              Ich habe es jetzt mal so gemacht
              document.body.innerHTML = document.body.innerHTML + 'Spieler nicht aktiv: ' + gesamt + '<br> Davon ' + i + ' im Urlaub und ' + inaktiv + ' inaktiv';

              Sprich nicht mit dem +=.
              Jedoch steht trotzdem alles noch unten.

              1. Okay, habs nun verstanden ^^

                Habe doc.b.innerHTML = 'gwegwse'

                Nun gehe ich auf Google.de und es lädt Google und dann mein Skript, nach dem Laden des skripts verschwindet die Google Seite und ganz oben steht meine Ausgabe ^^

                Soweit so gut, aber wie bekomme ich die Homepage wieder her? Diese verschwindet sofort nach dem Laden des skriptes :/

                1. Mahlzeit Alex,

                  Okay, habs nun verstanden ^^

                  Das bezweifle ich.

                  Habe doc.b.innerHTML = 'gwegwse'

                  Das heißt, Du ersetzt den kompletten Inhalt von document.body mit 'gwegwse'. Ich denke nicht, dass das das ist, was Du willst.

                  Nun gehe ich auf Google.de und es lädt Google und dann mein Skript, nach dem Laden des skripts verschwindet die Google Seite und ganz oben steht meine Ausgabe ^^

                  Vollkommen klar.

                  Soweit so gut, aber wie bekomme ich die Homepage wieder her? Diese verschwindet sofort nach dem Laden des skriptes :/

                  Vielleicht solltest Du weder versuchen, Deinen Text *HINTEN* an den Inhalt von document.body anzuhängen, noch den kompletten Inhalt von document.body mit Deinem Text zu *ERSETZEN*, sondern schlicht und einfach mal Deinen Text *VOR* dem Inhalt von document.body einzufügen?

                  Ich weißt: ist eine revolutionäre Idee und so ... aber wär das nicht mal einen Versuch wert?

                  MfG,
                  EKKi

                  --
                  sh:( fo:| ch:? rl:( br:& n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                  1. Ich habe mal ein bisschen rumprobiert.
                    Die näheste Lösung die ich erreicht habe ist diese hier.

                    document.body.innerHTML = 'Spieler nicht aktiv: ' + gesamt + '<br> Davon ' + i + ' im Urlaub und ' + inaktiv + ' inaktiv' + document.body.innerHTML;

                    So sehe ich meine Ausgabe kurz und dann kommt die Homepage über meine Ausgabe.. Sprich sehe ich diese nicht mehr.

                    Ich verzweifel gerade :(

                    1. So sehe ich meine Ausgabe kurz und dann kommt die Homepage über meine Ausgabe.. Sprich sehe ich diese nicht mehr.

                      Ich verzweifel gerade :(

                      Aber im generierten Quelltext ist die Ausgabe sicher davor drin.

                      Möglicherweise wird der von dir eingefügte Inhalt nur durch die anderen Seitenelemente (der Header z.B.) überdeckt.

                      1. So sehe ich meine Ausgabe kurz und dann kommt die Homepage über meine Ausgabe.. Sprich sehe ich diese nicht mehr.

                        Ich verzweifel gerade :(

                        Aber im generierten Quelltext ist die Ausgabe sicher davor drin.

                        Nein, dort ist meine Ausgabe nicht drin.

                        Möglicherweise wird der von dir eingefügte Inhalt nur durch die anderen Seitenelemente (der Header z.B.) überdeckt.

                        Habe gerade eine Homepage geöffnet, welche mittig zentriert ist, ohne viel schnick schnack und dort oben links, sehe ich auch meine Ausgabe (im quelltext steht nichts).
                        Sprich liegt es wirklich nur daran, dass die Inhalte von der gewissen Seite meine Ausgabe überdecken, nur wie bekomme ich das hin, dass meine Ausgabe in den Vordergrund soll?

                        1. Nein, dort ist meine Ausgabe nicht drin.

                          Was sagt die Fehlerkonsole deines Browsers?

                          javascript:document.body.innerHTML = 'foo' + document.body.innerHTML;

                          funktioniert einwandfrei

                          Möglicherweise wird der von dir eingefügte Inhalt nur durch die anderen Seitenelemente (der Header z.B.) überdeckt.

                          Habe gerade eine Homepage geöffnet, welche mittig zentriert ist, ohne viel schnick schnack und dort oben links, sehe ich auch meine Ausgabe (im quelltext steht nichts).

                          Wenn im Quelltext nichts steht, schaust dir dir nicht das generierte DOM an sondern den Quelltext, der ursprünglich geliefert wurde - dass da nix drin steht ist klar.

                          Sprich liegt es wirklich nur daran, dass die Inhalte von der gewissen Seite meine Ausgabe überdecken, nur wie bekomme ich das hin, dass meine Ausgabe in den Vordergrund soll?

                          Finde herraus, was deine Inhalte überdeckt und manipuliere die entsprechenden CSS-Eigenschaften oder füge ggf. zusätzliche Elemente ein.

                          1. Finde herraus, was deine Inhalte überdeckt und manipuliere die entsprechenden CSS-Eigenschaften oder füge ggf. zusätzliche Elemente ein.

                            Du hattest recht!
                            Dieser CSS Code verdeckt meine Ausgabe.

                            #extraDiv1 {  
                                background: url("layout/bg_sky.jpg") repeat scroll center top transparent;  
                                height: 147px;  
                                position: absolute;  
                                right: 0;  
                                top: 0;  
                                width: 100%;  
                            }
                            

                            Meine Ausgabe wird immer von dem Bild bg_sky.jpg verdeckt.
                            Jetzt müsste ich nur noch herrausfinden wie man das unterbinden kann mit Javascript :/

                            Könnt ihr mir Ansätze geben?

                            1. Könnt ihr mir Ansätze geben?

                              Gib dem element enifach mal einen top-Wert von 25 Pixel.

        2. Ich habe es jetzt mal so gemacht
          document.body.innerHTML = document.body.innerHTML + 'Spieler nicht aktiv: ' + gesamt + '<br> Davon ' + i + ' im Urlaub und ' + inaktiv + ' inaktiv';

          Sprich nicht mit dem +=.
          Jedoch steht trotzdem alles noch unten.

  2. Ich brauch das aber ganz oben, sprich direkt unter dem Body.

    document.body.innerHTML += 'Spieler nicht aktiv: ' + gesamt + '<br> Davon ' + i + ' im Urlaub und ' + inaktiv + ' inaktiv';

    Auf document.body.innerHTML += solltest du möglichst verzichten, weil es das gesamte Dokument zu einem String serialisiert, den String erweitert und dann wieder alles parst und das komplette Dokument auswechselt. Dabei werden alle Elemente gelöscht und neu aufgebaut, dabei geht sämtlicher Status und sämtliche Event-Handler verloren.

    Einfache Sachen kannst du über das DOM machen, der Einfachheit halber mit einem DocumentFragment als Container:

    var fragment = document.createDocumentFragment();  
    var text1 = document.createTextNode('Spieler nicht aktiv: ' + gesamt);  
    fragment.appendChild(text1);  
    var br = document.createElement('br');  
    fragment.appendChild(br);  
    var text2 = document.createTextNode('Davon ' + i + ' im Urlaub und ' + inaktiv + ' inaktiv');  
    fragment.appendChild(text2);  
    document.body.insertBefore(fragment, document.body.firstChild);
    

    Das direkte Einfügen von HTML ist etwas schwieriger, dazu taugt entweder http://de.selfhtml.org/javascript/objekte/all.htm#insert_adjacent_html@title=insertAdjacentHTML. Diese Methode kennen allerdings noch nicht alle Browser. In Browsern, die sie kennen, ist sie aber die Methode der Wahl. Die Feature-Abfrage if (document.body.insertAdjacentHTML) {…} testet die Unterstützung einfach.

    Alternativ kann man ein Element erzeugen und dessen innerHTML setzen, dann das Element einhängen.

    var el = document.createElement('p');  
    el.innerHTML = 'Text <strong>mit</strong> HTML';  
    document.body.insertBefore(el, document.body.firstChild);
    

    Eigentlich spricht nichts dagegen, denn losen Text sollte man im Body ohnehin nicht haben.

    Mathias