blubb: Erweitern des Node-Objektes

Hallo,

da ich gerne striktes DOM benutzen würde, wollte ich mir dem Komfort und der Sauberkeit des Codes halber einige Methoden zusätzlich mit ins Node-Objekt holen.

Beispielsweise möchte ich den Textnode eines Elementnodes ändern, was ja aber nur funktioniert, wenn's auch einen Textnode gibt :)

Der Code dazu sieht so aus:
--- schnipp
Node.prototype.editText = function(value) {
 if(this.firstChild && this.firstChild.nodeType == 3)
  return (this.firstChild.nodeValue = value);

return this.appendChild(document.createTextNode(value));
}
--- schnapp

Wenn ich jetzt z.B. mit document.getElementById("id").editText("text"); das besagte machen will, funktioniert das in Mozilla auch sehr schön. Konqueror und Opera scheinen das Node-Objekt aber gar nicht erst zu kennen? Irgendwelche "Workarounds" o.ä. verfügbar?

  1. Hallo,

    Wenn ich jetzt z.B. mit document.getElementById("id").editText("text"); das besagte machen will, funktioniert das in Mozilla auch sehr schön. Konqueror und Opera scheinen das Node-Objekt aber gar nicht erst zu kennen? Irgendwelche "Workarounds" o.ä. verfügbar?

    Den Konquerolant (habe 3.1) kann man getrost in die Tonne treten und ich neige dazu seine Existens zu verdrängen.
    Auch ist mir Opera eher ein Graus.

    Während sich  Mozilla wacker durch die DOM Conformance Test Suites mit seinen 685 Test beißt und dabei 14 Federn läßt, versagt der Opera ab Test 35 vollends und das (ES) Konquerolant mag nicht mal den aller ersten Test...

    Vielleicht ist Dir mit http://forum.de.selfhtml.org/archiv/2004/9/t89727/ etwas geholfen.

    Gruß aus Berlin!
    eddi

    --
    wahsaga (http://forum.de.selfhtml.org/archiv/2004/9/90932/#m546295)
    > vielleicht könnte man für heteros eine "strict"-DTD zu grunde legen [...oder...] eine darauf anwendbare CSS-eigenschaft 'sex'
    In dem Sinne: Tassen hoch! Auf die Liebe zwischen Menschen! ;)
  2. gruss blubb,

    Der Code dazu sieht so aus:
    --- schnipp
    Node.prototype.editText = function(value) {
    ...
    }
    --- schnapp

    ... funktioniert das in Mozilla auch sehr schön. Konqueror und Opera scheinen
    das Node-Objekt aber gar nicht erst zu kennen? ...

    jeder browserhersteller darf selbst entscheiden, wieviel er vom konzept
       der objektprototypen, welches so grundlegend fuer JavaScript ist, auf
       die grundobjekte des DOM uebertraegt.
       sowohl die DOM-spezifikationen, als auch die ECMAScript-spec, machen
       dazu keine klaren aussagen - bzw. ich habe es nicht richtig gelesen und/
       oder verstanden.

    interessant ist, das bei Dir "Node.prototype ..." funktioniert, ich habe,
       glaube ich, fuer Mozilla immer den prototypen aller html-elemete genommen -
       "HTMLElement.prototype ..." bzw. "Element.prototype ..."

    fuer operas sollte das scripten des "(HTML)Element"-objektes ab der version
       7.5(irgendwas) mittlerweile funktionieren  -  alle anderen browser unter-
       stuetzen diesen eleganten ansatz leider nicht.

    ... Irgendwelche "Workarounds" o.ä. verfügbar?

    vielleicht so, aus:

    Node.prototype.editText = function(value) {
         ...
       };

    wird:

    var nodeEditText = function(value) {
         ...
       };

    weisse jedem objekt die globale funktion "nodeEditText" in dem moment zu
       (myObj.editText = nodeEditText;), in dem Du ueber die methode "editText"
       verfuegen moechtest.

    by(t)e by(t)e - peterS. - pseliger@gmx.net

    --
    ie:( fl:) br:> va:| ls:& rl:| n4:} ss:} de:µ js:} zu:]
    1. 你好 peterS.,

      [...]
         sowohl die DOM-spezifikationen, als auch die ECMAScript-spec, machen
         dazu keine klaren aussagen - bzw. ich habe es nicht richtig gelesen
         und/oder verstanden.

      Nein, das stimmt nicht. Die ECMAScript-Spec sagt eindeutig, dass ein
      Objekt _immer_ implizit das prototype-Objekt referenziert und dass
      Attribute, die dem Prototype-Objekt zugeordnet werden, sich auf alle Objekte
      auswirkt.

      Dass die DOM-Spec dazu nichts sagt, ist klar: DOM ist sprachunabhaengig :)

      再见,
       CK

      --
      Fortune: Knowing others is wisdom;
      Knowing the self is enlightenment.
      Mastering others requires force;
      Mastering the self needs strength.
      He who knows he has enough is rich.
      Perseverance is a sign of willpower.
      He who stays where he is endures.
      To die but not to perish is to be eternally present.
      http://wwwtech.de/
      1. gruss Christian,

        [...]
           sowohl die DOM-spezifikationen, als auch die ECMAScript-spec, machen
           dazu keine klaren aussagen - bzw. ich habe es nicht richtig gelesen
           und/oder verstanden.

        Nein, das stimmt nicht. Die ECMAScript-Spec sagt eindeutig, dass ein
        Objekt _immer_ implizit das prototype-Objekt referenziert und dass
        Attribute, die dem Prototype-Objekt zugeordnet werden, sich auf alle Objekte
        auswirkt.

        richtig, und ich denke, dass damit eindeutig der ECMAScript-Sprachkern
           gemeint ist.

        Dass die DOM-Spec dazu nichts sagt, ist klar: DOM ist sprachunabhaengig :)

        richtig, DOM und ECMAScript haben erst mal nichts miteinander zu tun.

        blubb fragte aber dannach, in welchen browsern ECMAScript-spezifikationen
           auch in das DOM implementiert wurden (prototypen von Node-objekten).
           genau darauf habe ich geantwortet:

        jeder browserhersteller darf selbst entscheiden, wieviel er vom konzept
          der objektprototypen, welches so grundlegend fuer JavaScript ist, auf
          die grundobjekte des DOM uebertraegt.
          sowohl die DOM-spezifikationen, als auch die ECMAScript-spec, machen
          dazu ...

        lag hier das missverstaendnis? - "dazu" bezieht sich doch eindeutig
                 auf die grauzone: "JavaScript-anbindung an DOM (bzw. umgekehrt)".

        ... keine klaren aussagen - bzw. ich habe es nicht richtig gelesen und/
          oder verstanden.

        by(t)e by(t)e - peterS. - pseliger@gmx.net

        --
        ie:( fl:) br:> va:| ls:& rl:| n4:} ss:} de:µ js:} zu:]
        1. 你好 peterS.,

          [...]
             sowohl die DOM-spezifikationen, als auch die ECMAScript-spec,
             machen dazu keine klaren aussagen - bzw. ich habe es nicht richtig
             gelesen und/oder verstanden.

          Nein, das stimmt nicht. Die ECMAScript-Spec sagt eindeutig, dass ein
          Objekt _immer_ implizit das prototype-Objekt referenziert und dass
          Attribute, die dem Prototype-Objekt zugeordnet werden, sich auf alle
          Objekte
          auswirkt.

          richtig, und ich denke, dass damit eindeutig der ECMAScript-Sprachkern
             gemeint ist.

          Da steht nichts von Sprachkern, da steht nur, dass es so ist :) Objekte, die
          sich nicht durch prototype erweitern lassen, handeln also dem Standard
          zuwider.

          jeder browserhersteller darf selbst entscheiden, wieviel er vom
            konzept der objektprototypen, welches so grundlegend fuer JavaScript
            ist, auf die grundobjekte des DOM uebertraegt.
            sowohl die DOM-spezifikationen, als auch die ECMAScript-spec, machen
            dazu ...

          lag hier das missverstaendnis? - "dazu" bezieht sich doch
                   eindeutig auf die grauzone: "JavaScript-anbindung an DOM (bzw.
                   umgekehrt)".

          Es gibt da keine Grauzone. Der ECMA-Script-Standard ist an dieser Stelle
          recht eindeutig. Da wird nicht von "Objekten im Sprachkern" geredet, sondern
          ganz allgemein von Objekten aller Art.

          再见,
           CK

          --
          Keine Schneeflocke faellt je auf die falsche Stelle.
          http://wwwtech.de/
          1. gruss Christian,

            im schnelldurchlauf bin ich in allen 4 bislang veroeffentlichten ECMAScript-
               spezifikationen immer noch nicht auf eine fuer mich eindeutige aussage zum
               problem gestossen, aber dank Deiner hartnaeckigkeit habe ich google zum
               thema "ECMASCript binding DOM" bemueht
               http://www.google.com/search?num=20&hl=en&lr=lang_en&c2coff=1&as_qdr=all&q=ECMAScript+binding+DOM&btnG=Search&lr=lang_en
                                                     und bin unter anderem auf diese
               interessanten sachen gestossen, die mir meine bisherige ahnungslosigkeit
               deutlich vor augen fuehren -

            http://www.w3.org/TR/DOM-Level-2-Core/ecma-script-binding.html -

            andererseits bedrueckt mich diese tatsache nicht so sehr, weil nicht nur
               ich als laie schwierigkeiten beim verstaendnis von w3c-specs zu haben
               scheine:

            http://lists.xml.org/archives/xml-dev/200101/msg00557.html

            "ECMAScript Language Binding" fuer DOM-Level-2 ist zwar nur eine empfehlung,
               da diese aber nunmehr schon 4 jahre auf dem buckel hat, neige ich auch zur
               ansicht, dass nur die entwicklergemeinde von mozilla in diesem punkt die
               hausaufaufgaben richtig gemacht hat.

            by(t)e by(t)e - peterS. - pseliger@gmx.net

            --
            ie:( fl:) br:> va:| ls:& rl:| n4:} ss:} de:µ js:} zu:]
    2. Hallo,

      fuer operas sollte das scripten des "(HTML)Element"-objektes ab der version 7.5(irgendwas) mittlerweile funktionieren

      ...nur wie? Selbst mit 7.60 Preview 3 war ich in meinen Tests nicht weit gekommen.

      Mathias

      1. gruss Mathias,

        asche auf mein haupt - gestern war ueberhaupt nicht mein tag. ich weiss auch
           nicht, was mich geritten hat, vermutungen statt fakten zu aeussern - eitelkeit
           wahrscheinlich.

        bei irgendeiner testreihe fuer browser lieferte mir "typeof Node" fuer den
           Opera 7.54 "function" zurueck, was mich zur unueberprueften annahme
           verleitete, das der dann auch mit "Node.prototype ..." keine probleme
           mehr haben sollte - hat er aber, ausserdem liefert mir ein Opera 7.22
           gerade dasselbe ergebnis - da hab ich also mal wieder voll ins klo gegriffen :-(

        zerknirscht - peterS. - pseliger@gmx.net

        --
        ie:( fl:) br:> va:| ls:& rl:| n4:} ss:} de:µ js:} zu:]