iceer: replace will nicht wie ich...

Hallo ihr lieben,
zuerst will ich sagen ich bin kompletter Anfänger und setze mich gerade etwas mit Javascript ausseinander.....
irgendwie will das aber nicht wie ich...
meine alerts geben beide das aus was sie sollen aber das innerHTML wird einfach nicht ersetzt wie es soll... es passiert gelinde gesagt garnichts.
also an der If abfrage liegts nicht die funkt^^
alert(replace) gibt mir wie gewünscht den korrekt geänderten body Text aus.
auf der steite ändert sich aber mal garnichts....
ich denke trotzdem dass es am replace liegt, da wenn ich einfach sage
document.body.innerHTML = [<a href="index2.php?page=internet&var2=&status=camp>Camp Log</a>][<a;
sich der komplette body nur dahingehend ändert.
Bitte helft mir

  
if (document.getElementById('editlog') && window.location.href.match('page=logs') == null) {  
var replace = '[<a href="index2.php?page=internet&var2=&status=camp>Camp Log</a>][<a href="index2.php?page=internet';  
var toreplace ='[<a href="index2.php?page=internet';  
var replace = document.body.innerHTML.replace(toreplace,replace);  
        alert(replace);  
        alert(toreplace);  
       document.body.innerHTML = replace;  
}  

  1. Ok gerade nochmal nach geschaut....

    im alert zeigt er mir :

      
    [<a href="index2.php?page=internet&var2=&status=camp>Camp Log</a>]  
    [<a href="index2.php?page=internet&amp;var2=252.115.199.40&amp;var3=log&amp;var4=">Access logfile</a>]  
    [<a href="index2.php?page=internet&amp;var2=252.115.199.40&amp;var3=files&amp;var4=">Files</a>]  
    [<a href="index2.php?page=internet&amp;var2=252.115.199.40&amp;var3=logout&amp;var4=">Logout</a>]
    

    allerdings im body schaut das ganze dann so aus

      
    [<a href="index2.php?page=internet&amp;var2=&amp;status=camp>Camp Log</a>]  
     [<a href=" index2.php?page="internet&amp;var2=252.115.199.40&amp;var3=log&amp;var4=&quot;">Access logfile</a>]  
     [<a href="index2.php?page=internet&amp;var2=252.115.199.40&amp;var3=files&amp;var4=">Files</a>]  
     [<a href="index2.php?page=internet&amp;var2=252.115.199.40&amp;var3=logout&amp;var4=">Logout</a>]
    

    warum auch immer hier ein leerzeichen eingebaut wird nach dem Href="

    [<a href=" index2.php?page="internet&amp;var2=252.115.199.40&amp;var3=log&amp;var4=&quot;">Access logfile

  2. @@iceer:

    nuqneH

    ich denke trotzdem dass es am replace liegt

    Es liegt, daran, dass du replace einsetzt, wofür es überhaupt nicht gedacht ist.

    Du willst keinen String bearbeiten, sondern ein Element aus dem DOM löschen. Dafür gibt es entsprechende Methoden.

    Das betreffende a-Element kann über sein href-Attribut selektiert werden, wenn keine andere Möglichkeit (ID; fest definierte Stelle in seinem Elternelement; …)

    var campLog = document.querySelector('[href="index2.php?page=internet&var2=&status=camp"]');

    und dann entfernt werden: in neuen Browsern (außer IE) funktioniert schon

    campLog.[link:https://developer.mozilla.org/en-US/docs/Web/API/ChildNode.remove@title=remove]();

    ansonsten über campLog.parentNode.[link:http://wiki.selfhtml.org/wiki/JavaScript/Objekte/DOM/element/removeChild@title=removeChild](campLog)];

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  3. Hi,

    wie Gunnar schon erwähnt, solltest du deinen links eine ID geben.
    Dann kannst du href ändern.
    z.B.

    ~~~javascript

    var neuer_link = "xyz.php";
       var link = document.getElementById("abc");
       link.setAttribute("href", neuer_link);

      
    Was ist das mit den eckigen Klammern? - hab ich noch nicht gesehen.  
      
    Viele Grüße aus LA
    
    -- 
    ralphi
    
    1. Om nah hoo pez nyeetz, ralphi!

      wie Gunnar schon erwähnt, solltest du deinen links eine ID geben.
      Dann kannst du href ändern.

      Nein, ein Link kann über sein href-Attribut selektiert werden, falls es keine andere Möglichkeit gibt

      Was ist das mit den eckigen Klammern? - hab ich noch nicht gesehen.

      Das ist der Attributselektor.

      Matthias

      --
      Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Ara und Araber.

  4. also ich hab es nun gelöst war ganz einfach...
    var replace = '[<a href="index2.php?page=internet&var2=&status=camp>Camp Log</a>][<a href="index2.php?

    muss sein
    var replace = '[<a href="index2.php?page=internet&var2=&status=camp">Camp Log</a>][<a href="index2.php?

    es hat nur " gefehlt...

    ich nutze das schon mit Absicht so wie es dort vorzufinden ist...
    ich will ausserdem nichts löschen sondern etwas im Text einfügen...

    Die [ ] sind einfach nur um die Links gebaut...
    also auf der Seite sieht das dann komplett so aus in der Ansicht:
    [Access Logfile] [Files]  [logout]

    daraus soll werden

    [Camp Log]  [Access Logfile] [Files]  [logout]

    ich wollte nicht document.getElementsbyNameTag('a');
    nutzen weil auf dieser Seite verdammt viele Links vorzufinden sind und ich darüber hinaus versuche ohne all zu viele Schleifen aus zu kommen.
    Mittlerweile habe ich aus dem kompletten Script 30 Schleifen entfernt. Dies hat zu einer deutlichen Verschnellerung beigetragen.
    gerne hätte ich das ganze auch über ein Elternelement also z.b.
    document.getElementsbyNameTag('table')[welcheZahlauchimmer].getElementsbyNameTag('a') [1];
    aufgerufen. GIBT ES ABER NICHT, das ist direkt im Body eingebettet....
    Hätte man es ordentlich gelesen, hätte man erkannt, dass ich nicht etwas löschen will sondern hinzufügen...
    weiterhin ist das ja nicht für eine meiner Seiten sonst würde ich wohl direkt den Link über PHP generieren lassen und auch IDs einfügen für Links...
    somit kann ich auch nicht auf nicht vorhandene IDs zugreifen.

    Falls jemand wirklich eine angenehmere Methode kennen würde kann er sich sehr gerne melden.
    Mir fällt aber hier wirklich nichts besseres ein.
    also:

    -keine IDs
    -Bitte keine schleifen (ca 100-500 Durchläufe jeweils pro teil sind einfach zu viel und es muss fast instant passieren weil ich keine ewigen Ladezeiten möchte. es wird ja nicht nur dies ersetzt)
    -Kein Elternelement vorhanden, sonst würde ich auch eine Schleife akzeptieren auf dieses Elternelement

    da leider getElementsByNameTag('a').search(bla); nicht geht um, teilstrings zu suchen kann ich das auch nicht nutzen. ist auch logisch dass es nicht geht. IndexOf(); geht auch nicht weil der link auf den ich mich beziehe variabel ist nur der teil den ich ersetze im Body ist nicht variabel.

    1. @@iceer:

      nuqneH

      also ich hab es nun gelöst

      Nein. Nochmal: Stringbearbeitung mit regulärem Ausdruck ist KEINE LÖSUNG für dein Problem.

      ich will ausserdem nichts löschen sondern etwas im Text einfügen...

      Ja, da hast du mich mit den Variablenbezeichnern replace und toreplace verwirrt.

      Auch für das Einfügen gibt es entsprechende Methoden, hier wäre es [link:http://wiki.selfhtml.org/wiki/JavaScript/Objekte/DOM/element/insertBefore@title=insertBefore()].

      Man kann es aber auch mit innerHTML machen:

      var accessLogfile = document.querySelector('[href="index2.php?page=internet"]'),  
          accessLogfileParent = accessLogfile.parentNode;  
        
      accessLogfileParent.innerHTML = '<a href="index2.php?page=internet&var2=&status=camp>Camp Log</a>' + accessLogfileParent.innerHTML;
      

      Jedenfalls nichts mit regulären Ausdrücken.

      Die [ ] sind einfach nur um die Links gebaut...

      Die gehören nicht ins HTML, sondern sind Darstellung, also CSS:

      a::before { content: "[" }  
      a::after  { content: "]" }
      

      Statt 'a' brauchst du natürlich einen spezielleren Selektor, wenn das nicht für alle a-Elemente auf der Website gelten soll. Das könnten Attributselektoren sein, wenn es bei dem vorgegebenen HTML keine andere Möglichkeit gibt.

      Qapla'

      --
      „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
      1. Erstmal vielen Dank dass du dich mit mir herum schlägst.
        da leider diese Klammern nur für diese 4 links gelten und diese auch in der originalseite nicht im css sondern im HTML vorkommen, sowie dein code logischerweise nicht genau mein problem lösen konnte, habe ich mich nun selbst daran versucht aus deinem etwas abzuleiten.
        Es funktioniert. Meine Frage ist blos ob dies nun so schnell und Korrekt gelöst ist?
        Komischerweise hat der ersteller dieser Seite zu meinem Glück seiner Form eine id gegeben. So gut wie allem anderen aber nicht.
        outerHTML gibt mir halt einfach das zurück was ich brauche um hiervor etwas einzusetzen.
        nun falls das so past muss ich dann doch einiges im kompletten script neu machen, daher möchte ich gerne eine wie ich denke von dir Fachkundige Meinung.

          
        // ip herausfinden wichtig für den camp link und  den logfile link  
        var ip=document.getElementById("internetAdress").value;  
        var accessLogfile = document.querySelector('[href="index2.php?page=internet&var2='+ip+'&var3=log&var4="]');  
        accessLogfile.outerHTML = '<a href="index2.php?page=internet&var2=&status=camp">Camp Log</a>]  [' + accessLogfile.outerHTML;
        

        Vielen Dank nochmal. Hat mir wirklich ganz neues gezeigt.

        1. @@iceer:

          nuqneH

          accessLogfile.outerHTML = '<a href="index2.php?page=internet&var2=&status=camp">Camp Log</a>] [' + accessLogfile.outerHTML;

          Der Form halber: Das Klammernpaar [] gehört zu dem einzufügenden a-Element, auch die öffnende, und nicht zum nächsten.

          Also nicht
          [Camp Log]  [Access Logfile] [Files]  [logout]
           ^^^^^^^^^^^^
          einfügen, sondern
          [Camp Log]  [Access Logfile] [Files]  [logout]
          ^^^^^^^^^^^^

          Also:

          accessLogfile.outerHTML = '[<a href="index2.php?page=internet&var2=&status=camp">Camp Log</a>]  ' + accessLogfile.outerHTML;  
          
          

          Qapla'

          PS: Warum „logout“ mit kleinem l?

          --
          „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
          1. @Gunnar Bittersmann

            accessLogfile.outerHTML = '[<a href="index2.php?page=internet&var2=&status=camp">Camp Log</a>]  ' + accessLogfile.outerHTML;

            würde ergeben
            [[Camp Log] Access Lofgfile]  [Files]  [logout]

            weil mir das outerHTML nur <a href"......"> Access Lofgfile </a>
            ausgibt.
            es müsste
            [ <a href"......"> Access Lofgfile </a> ]
            ausgeben damit das geht...
            Nunja das Problem ist jetzt gelöst und schon hau ich mit einem neuen Problem voll rein.

            <button onclick="var myA = new Array(86.911728,86911728,8691172.8,8691172.8,86.911728,8691.1728);'+
                '\n alert(myA.join('---'));">Array: JOIN</button>
            funktioniert tadellos.
            nun habe ich aber das problem:
            <button onclick="var myA = new Array(86.911.7.28,86.911.72.8,869.11.7.2.8,8.69.11.72.8,8.691.172.8,8.691.172.8);'+
                '\n alert(myA.join('---'));">Array: JOIN</button>
            geht mal absolut garnicht....
            die möglichkeit "86.911.7.28", etc.
            habe ich nicht, da ich ein vorhandenes array laden möchte.

            <button onclick="var myA = new Array('+lost+');'+
                '\n alert(myA.join('---'));">Array: JOIN</button> <br>';
            so soll das dann im endeffekt aussehen.
            im Quellcode der Seite stimmt dann auch alles aber ich denke dass es mit den punkten hier irgend ein Problem gibt...

            1. @@iceer:

              nuqneH

              [[Camp Log] Access Lofgfile]  [Files]  [logout]

              weil mir das outerHTML nur <a href"......"> Access Lofgfile </a>
              ausgibt.

              Ja, klar.

              Dann ist das Einfügen übers Eltenelement die saubere Lösung. Du kannst da ja noch die eckigen Klammern ergänzen.

              <button onclick="var myA = new Array(86.911728,86911728,8691172.8,8691172.8,86.911728,8691.1728);'+
                  '\n alert(myA.join('---'));">Array: JOIN</button>
              funktioniert tadellos.

              Kann ich mir nicht vorstellen, wenn ich mir Anführungszeichen so ansehe.

              nun habe ich aber das problem:
              <button onclick="var myA = new Array(86.911.7.28,86.911.72.8,869.11.7.2.8,8.69.11.72.8,8.691.172.8,8.691.172.8);'+
                  '\n alert(myA.join('---'));">Array: JOIN</button>
              geht mal absolut garnicht....

              Natürlich nicht. Was soll 86.911.7.28 sein? Eine Zahl ist es nicht, eine Zeichenkette auch nicht.

              die möglichkeit "86.911.7.28", etc.
              habe ich nicht, da ich ein vorhandenes array laden möchte.

              ??

              <button onclick="var myA = new Array('+lost+');'+
                  '\n alert(myA.join('---'));">Array: JOIN</button> <br>';
              so soll das dann im endeffekt aussehen.

              Kannst du mal bitte dein Problem beschreiben und nicht das, was du als Lösung ansiehst?

              Qapla'

              --
              „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
              1. Also m in Problem ist folgendes:
                Ich habe ein Array mit solchen Zeichenketten. Auf der Seite um die es geht sind das im Endeffekt "Ids" der User und npcs
                Ja die sind wirklich so aufgebaut...
                Nun möchte ich eigentlich beim Klick auf einen Button aus dem Array lost eine Variable löschen.
                Also eigentlich ist um diesen Button eine for Schleife die zu jeder is 2 links erstellt sowie einen Button
                Also im Grunde lost.splice(i,1);
                Habe ich nun andere Werte im Array funktioniert das ganze auch tadellos
                In die Links lassen sich die Werte aus dem Array komischerweise ohne Problem auslesen
                 @@iceer:

                nuqneH

                [[Camp Log] Access Lofgfile]  [Files]  [logout]

                weil mir das outerHTML nur <a href"......"> Access Lofgfile </a>
                ausgibt.

                Ja, klar.

                Dann ist das Einfügen übers Eltenelement die saubere Lösung. Du kannst da ja noch die eckigen Klammern ergänzen.

                <button onclick="var myA = new Array(86.911728,86911728,8691172.8,8691172.8,86.911728,8691.1728);'+
                    '\n alert(myA.join('---'));">Array: JOIN</button>
                funktioniert tadellos.

                Kann ich mir nicht vorstellen, wenn ich mir Anführungszeichen so ansehe.

                nun habe ich aber das problem:
                <button onclick="var myA = new Array(86.911.7.28,86.911.72.8,869.11.7.2.8,8.69.11.72.8,8.691.172.8,8.691.172.8);'+
                    '\n alert(myA.join('---'));">Array: JOIN</button>
                geht mal absolut garnicht....

                Natürlich nicht. Was soll 86.911.7.28 sein? Eine Zahl ist es nicht, eine Zeichenkette auch nicht.

                die möglichkeit "86.911.7.28", etc.
                habe ich nicht, da ich ein vorhandenes array laden möchte.

                ??

                <button onclick="var myA = new Array('+lost+');'+
                    '\n alert(myA.join('---'));">Array: JOIN</button> <br>';
                so soll das dann im endeffekt aussehen.

                Kannst du mal bitte dein Problem beschreiben und nicht das, was du als Lösung ansiehst?

                Qapla'