Gunnar Bittersmann: string not an object?

Morjen,
Folgendes funktioniert:

var Meta = document.getElementsByTagName("meta");
for (var i = 0; i < Meta.length; i++)
 if (Meta[i].attributes["name"].nodeValue == "DC.Date") {
  document.write(Meta[i].attributes["content"].nodeValue);
  i = Meta.length;
 }

Nun möchte ich den Vergleich case-insensituve machen, also
Meta[i].attributes["name"].nodeValue in Kleinbuchstaben umwandeln.

typeof Meta[i].attributes["name"].nodeValue liefert erwartungsgemäß "string",
aber Meta[i].attributes["name"].nodeValue.toLowerCase() gibt die Fehlermeldung
"Meta[i].attributes["name"].nodeValue is not an object".

Ratlos,
Gunnar

--
"(Der Student) kann sich so völlig dem hingeben, was er naiv für die Computerwissenschaft hält, also der bloßen Verfeinerung seiner Programmiertechniken, daß er sich auf diese Weise effektiv daran hindert, etwas wirklich Wesentliches zu studieren."
(Joseph Weizenbaum in "Die Macht der Computer und die Ohnmacht der Vernunft")
  1. Hi,

    sorry, ich bin eher kein JavaScript-Baer, sondern eher ein JavaScript-Baerchen, darum (mal wieder ;-) nur etwas zur Signatur:

    "(Der Student) kann sich so völlig dem hingeben, was er naiv für die Computerwissenschaft hält, also der bloßen Verfeinerung seiner Programmiertechniken, daß er sich auf diese Weise effektiv daran hindert, etwas wirklich Wesentliches zu studieren."

    (Joseph Weizenbaum in "Die Macht der Computer und die Ohnmacht der Vernunft")

    Also, wenn es wirklich so ist, dass man mit den Mitteln der IT geschaeftslogisch relevante Sachverhalte der Realitaet nachbaut, um Prozesse und Projekte zu unterstuetzen, dann beschaeftigt sich die "Computerwissenschaft" doch mit weit mehr als mit Programmiertechniken? Dann ware doch die genannte Wissenschaft ausserordentlich wesentlich?

    Ich erahne zwar, was Hr.Weizenbaum mit diesem Satz meint ("Erst die Hausaufgaben machen (das Wesentliche studieren, Politik und so), dann das Spiel mit der Programmiertechnik"), aber ich wittere da nichts Gutes. Kannst Du mir den Satz vielleicht genauer zu erklaeren?

    Gruss,
    Ludger

    --
    "Kommst Du mit dem Weizenbaum, trau ich meinen Augen kaum."
    1. Ich erahne zwar, was Hr.Weizenbaum mit diesem Satz meint ("Erst die Hausaufgaben machen (das Wesentliche studieren, Politik und so), dann das Spiel mit der Programmiertechnik"), aber ich wittere da nichts Gutes. Kannst Du mir den Satz vielleicht genauer zu erklaeren?

      Hi Ludger,
      Ich hatte schon überlegt, meine Signatur mal wieder zu ändern, aber solange sie noch Gesprächsstoff liefert ... ;-) (</archiv/2004/8/t87876/#m523640> ff.)

      In "Die Macht der Computer und die Ohnmacht der Vernunft" setzt sich Weizenbaum auch mit dem auseinander, was Informatikstudenten gelehrt wird.

      Ich denke nicht, dass er meint, man müsse erst Polik studieren, um ein Informatikstudium aufnehmen zu können. Aber es ist schon wichtig, nicht nur zu lernen, WIE man etwas tut, sondern auch ein Verständnis dafür zu entwickeln, WAS man damit tut und welche Verantwortung man dafür hat.

      Man kann sicher ein Informatikstudium mit einem Diplom abschließen (weil man seine Programmiertechniken ausreichend verfeinert hat), ohne jemals darüber nachgedacht zu haben.

      Das ist schon bedenklich.
      Gunnar

      [1] Joseph Weizenbaum: Die Macht der Computer und die Ohnmacht der Vernunft, Suhrkamp-Verlag, 1978

      --
      "(Der Student) kann sich so völlig dem hingeben, was er naiv für die Computerwissenschaft hält, also der bloßen Verfeinerung seiner Programmiertechniken, daß er sich auf diese Weise effektiv daran hindert, etwas wirklich Wesentliches zu studieren."
      (Joseph Weizenbaum in "Die Macht der Computer und die Ohnmacht der Vernunft")
      1. Hi,

        Ich hatte schon überlegt, meine Signatur mal wieder zu ändern, aber solange sie noch Gesprächsstoff liefert ... ;-) (</archiv/2004/8/t87876/#m523640> ff.)

        solange ich der Einzige bin, der sich dafuer interessiert, koenntest Du durchaus aendern. Denn ich konnte meine persoenlichen (offiziellen ;-) Meinungen bereits dank Weizenbaum zufriedenstellend weiterentwickeln.

        Ich denke nicht, dass er meint, man müsse erst Polik studieren, um ein Informatikstudium aufnehmen zu können. Aber es ist schon wichtig, nicht nur zu lernen, WIE man etwas tut, sondern auch ein Verständnis dafür zu entwickeln, WAS man damit tut und welche Verantwortung man dafür hat.

        Der Brechtsche Oppenheimer?

        Man kann sicher ein Informatikstudium mit einem Diplom abschließen (weil man seine Programmiertechniken ausreichend verfeinert hat), ohne jemals darüber nachgedacht zu haben.

        Das ist schon bedenklich.

        Noch mal der Brechtsche Oppenheimer?

        Also, wenn es wirklich so ist, dass man mit den Mitteln der IT geschaeftslogisch relevante Sachverhalte der Realitaet nachbaut, um Prozesse und Projekte zu unterstuetzen, dann beschaeftigt sich die "Computerwissenschaft" doch mit weit mehr als mit Programmiertechniken? Dann ware doch die genannte Wissenschaft ausserordentlich wesentlich?

        Hatte ich mal bemerkt. - Oder denke ich zu rational (;-) fuer Hr.Weizenbaum?

        Gruss,
        Ludger

        1. Der Brechtsche Oppenheimer?

          Weizenbaum hatte mal bemerkt, dass es keine Kriege mehr geben würde, wenn kein Informatiker mehr fürs Militär arbeiten würde. Daran kann ich nicht glauben, die Menschen würden sich auch weiterhin mit Panzern (ohne hochtechnisierte Systeme) und Maschinengewehren bekämpfen.

          Kann aber nicht schaden, drüber nachzudenken, woran und für wen man arbeitet.

          Also, wenn es wirklich so ist, dass man mit den Mitteln der IT geschaeftslogisch relevante Sachverhalte der Realitaet nachbaut, um Prozesse und Projekte zu unterstuetzen, ...

          Mir ist nicht ganz klar, was du meinst. Geschäftslogisch??

          ... dann beschaeftigt sich die "Computerwissenschaft" doch mit weit mehr als mit Programmiertechniken? Dann ware doch die genannte Wissenschaft ausserordentlich wesentlich?

          Ja klar. Das sagt doch das Zitat auch. Und dass "Naive" unter Computerwissenschaft nur Programmiertechniken verstehen.
          Gunnar

          --
          "(Der Student) kann sich so völlig dem hingeben, was er naiv für die Computerwissenschaft hält, also der bloßen Verfeinerung seiner Programmiertechniken, daß er sich auf diese Weise effektiv daran hindert, etwas wirklich Wesentliches zu studieren."
          (Joseph Weizenbaum in "Die Macht der Computer und die Ohnmacht der Vernunft")
          1. Hi,

            Also, wenn es wirklich so ist, dass man mit den Mitteln der IT geschaeftslogisch relevante Sachverhalte der Realitaet nachbaut, um Prozesse und Projekte zu unterstuetzen, ...

            Mir ist nicht ganz klar, was du meinst. Geschäftslogisch??

            ich habe da mal folgendes unterstellt. (Professionelle) Software gibt es, um Geschaefte (einmalige oder andauernde Kooperationsverhaeltnisse) in ihren Prozessen und Projekten zu unterstuetzen. Damit koennen auch z.B. solche netten Sachen wie das Forum hier gemeint sein. Ja, auch das ist Geschaeft!   ;-)

            Gruss,
            Ludger

            "Mr.Check weiss Bescheid: http://app.mr-check.de/a31db05310e9661a316a6a618b708208/v2.0/Mrcheck.php?CID=tanto1&SB=Logik - http://app.mr-check.de/a31db05310e9661a316a6a618b708208/v2.0/Mrcheck.php?CID=tanto1&SB=Geschaeft - http://app.mr-check.de/a31db05310e9661a316a6a618b708208/v2.0/Mrcheck.php?CID=tanto1&SB=Geschaeftslogik"

  2. Hallo,

    typeof Meta[i].attributes["name"].nodeValue liefert erwartungsgemäß "string",
    aber Meta[i].attributes["name"].nodeValue.toLowerCase() gibt die Fehlermeldung
    "Meta[i].attributes["name"].nodeValue is not an object".

    Die attributes[]-Collection ist in Browsern ziemlich buggy, siehe http://www.quirksmode.org/dom/w3c_core.html. Verwende besser die Methode getAttribute().

    Außerdem ist vor Anwendung der toLowerCase()-Methode eine Abfrage auf das Objekt wichtig, da ja auch META-Informationen ohne name-Attribut vorkommen koennen (dafuer http-equiv).

    Probiere es so:

    var Meta = document.getElementsByTagName("meta");
    for (var i = 0; i < Meta.length; i++)
     if (Meta[i].getAttribute("name") && Meta[i].getAttribute("name").toLowerCase() == "dc.date") {
      document.write(Meta[i].getAttribute("content"));
      i = Meta.length;
     }

    MfG, Thomas

    1. Hallo,

      Die attributes[]-Collection ist in Browsern ziemlich buggy,

      Muss es die überhaupt geben? Der Opera7.5 kennt diese Auflistung gar nicht. In http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html oder http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html ist die auch nicht zu finden.

      viele Grüße

      Axel

      1. Hallo,

        Die attributes[]-Collection ist in Browsern ziemlich buggy,
        Muss es die überhaupt geben? Der Opera7.5 kennt diese Auflistung gar nicht. In http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html oder http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html ist die auch nicht zu finden.

        Im Core-DOM (erster Link) wird definiert:

        interface Node {
        ...

        readonly attribute NamedNodeMap     attributes;
        ...

        };

        Eine NamedNodeMap ist ein Array von Node-Objekten. DOM-konforme Zugriffsmethoden sind u. a. getNamedItem("name") bzw. item(index). Browser lassen ueblicherweise auch die ["name"]- bzw. [index]-Schreibweise zu.

        MfG, Thomas

        1. Hallo,

          Im Core-DOM (erster Link) wird definiert:
          interface Node {
          ...
          readonly attribute NamedNodeMap     attributes;
          ...
          };

          Hm, das haben die doch da jetzt erst reingeschrieben ;-)).

          Danke für den Hinweis.

          viele Grüße

          Axel

    2. Verwende besser die Methode getAttribute().

      ACK.

      Außerdem ist vor Anwendung der toLowerCase()-Methode eine Abfrage auf das Objekt wichtig, da ja auch META-Informationen ohne name-Attribut vorkommen koennen (dafuer http-equiv).

      Thomas,
      Das war's. Ich hab im head
       <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
       <meta name="DC.Date" content="2004-09-12" />

      Für Meta[0] ist Meta[i].attributes["name"] null, Meta[i].attributes["name"].nodeValue ebenfalls null, und darauf lässt sich die Methode toLowerCase() nun wirklich nicht anwenden (not an object).

      Bei der Abfrage
       if(Meta[i].attributes["name"].nodeValue == "DC.Date")
      gab's noch keinen Fehler, deshalb hab ich das übersehen.

      Probiere es so:

      Sieht gut aus.
      Danke,
      Gunnar

      --
      "(Der Student) kann sich so völlig dem hingeben, was er naiv für die Computerwissenschaft hält, also der bloßen Verfeinerung seiner Programmiertechniken, daß er sich auf diese Weise effektiv daran hindert, etwas wirklich Wesentliches zu studieren."
      (Joseph Weizenbaum in "Die Macht der Computer und die Ohnmacht der Vernunft")
  3. Morjen,

    Moin Gunnar,

    Folgendes funktioniert:

    var Meta = document.getElementsByTagName("meta");
    for (var i = 0; i < Meta.length; i++)
    if (Meta[i].attributes["name"].nodeValue == "DC.Date") {
      document.write(Meta[i].attributes["content"].nodeValue);
      i = Meta.length;
    }

    Nun möchte ich den Vergleich case-insensituve machen, also
    Meta[i].attributes["name"].nodeValue in Kleinbuchstaben umwandeln.

    typeof Meta[i].attributes["name"].nodeValue liefert erwartungsgemäß "string",
    aber Meta[i].attributes["name"].nodeValue.toLowerCase() gibt die Fehlermeldung
    "Meta[i].attributes["name"].nodeValue is not an object".

    das funktioniert bei mir einwandfrei. Wahrscheinlich gibt es bei dir gar kein "name" Attribut?
    Testweise kannst du eine inner Schleife einfügen:
    for (var j=0;j<Meta[i].attributes.length;j++) {
      alert(Meta[i].attributes[j].nodeValue;
      alert(Meta[i].attributes[j].nodeValue.toUpperCase());
    }

    Ratlos,
    Gunnar

    cu,
    ziegenmelker

    p.s. Der DOM Inspector (Mozilla) ist ein sehr nützliches Werkzeug bei solchen Entwicklungen.

    1. Wahrscheinlich gibt es bei dir gar kein "name" Attribut?

      Njain. Siehe meine Antwort auf Thomas'.

      Testweise kannst du eine inner Schleife einfügen:
      for (var j=0;j<Meta[i].attributes.length;j++) {
        alert(Meta[i].attributes[j].nodeValue;
        alert(Meta[i].attributes[j].nodeValue.toUpperCase());
      }

      Mit doppelter Schleife brauchte ich's gar nicht, aber
       alert(Meta[i]);
       alert(Meta[i].attributes["name"]);
       alert(Meta[i].attributes["name"].nodeValue);
      hat mich auf die richtige Spur gebracht.

      Danke,
      Gunnar

      --
      "(Der Student) kann sich so völlig dem hingeben, was er naiv für die Computerwissenschaft hält, also der bloßen Verfeinerung seiner Programmiertechniken, daß er sich auf diese Weise effektiv daran hindert, etwas wirklich Wesentliches zu studieren."
      (Joseph Weizenbaum in "Die Macht der Computer und die Ohnmacht der Vernunft")