Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Javascript Elemente Stylen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Javascript Elemente Stylen

    This topic has been deleted. Only users with topic management privileges can see it.
    • OliverIO
      OliverIO @Waytlion last edited by OliverIO

      @waytlion sagte in Javascript Elemente Stylen:

      classList

      warum da undefined kommt kann ich nicht mit diesen Informationen sagen, da müsste man mal das Element sehen.
      Mich wundert auch, das du eine XML-Datei parst, Ist publication ein Element einer XML-Datei?
      Welcher Typ hat die Variable publication?
      HTML ist zwar ein subset von XML. Ein XML muss aber nicht die Eigenschaften und Funktionen von HTML haben.

      um aus xml ein html zu machen, könnte man xslt nehmen. da stehen anweisungen drin welche xml elemente in welche html elemente/strukturen übersetzt werden.
      wenn du aber nur ein paar informationen aus der xml nehmen willst ist das zum lernen etwas kompliziert.

      wenn die methode funktioniert (was mich schon wundert, da ein browser halt auf html spezialisiert ist und xml so ein paar sachen kann, die html nicht kann),
      dann lese die informationen aus und erzeuge neue html elemente.

      das beste wäre, wenn du hier mal ein komplettes beispiel schickst, dass man selbst ausprobieren und dir damit helfen kann

      W 1 Reply Last reply Reply Quote 0
      • W
        Waytlion @OliverIO last edited by Waytlion

        @oliverio
        alles klar, danke für deine Hilfe,

        <script>
        function loadXMLDoc() {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
        myFunction(this);
        }
        };
        xmlhttp.open("GET", "http://eref.uni-bayreuth.de/XML/person_gndid/13330955X.xml", true);
        xmlhttp.send();
        }
        function myFunction(xml) {
        var xmlDoc = xml.responseXML;

        var h = (xmlDoc.getElementsByTagName("publication"));
        h.classList.add("mystyle");
        // xmlDoc.getElementsByTagName("publication").style.color = "red";

          var table= "<table> <tr><th width= 30%>Titel</th><th width=10% >Beteiligte</th><th width =5%>Link</th></tr>";
          var x = xmlDoc.getElementsByTagName("eprint");
          var y = xmlDoc.getElementsByTagName("person_search");
          var z = xmlDoc.getElementsByTagName("abstract_original");
            
        for (let i = 0; i <x.length; i++) {
        
        titel = x[i].getElementsByTagName("title")[0].childNodes[0].nodeValue + "<br />";
        
        publikation = "";
            
          
            if (x[i].getElementsByTagName("publication").length == 1){
               publikation = "in:  " + x[i].getElementsByTagName("publication")[0].childNodes[0].nodeValue ;
               publikation.classList.add("mystyle");
              }
        
            
            try {
                 var temp = x[i].getElementsByTagName("event_title")[0].childNodes[0].nodeValue + ", "
                 +  x[i].getElementsByTagName("event_location")[0].childNodes[0].nodeValue + ", "
                 +  x[i].getElementsByTagName("event_dates")[0].childNodes[0].nodeValue + ", ";
             if (typeof temp !== "undefined"){
               publikation = "presented at:  " + temp ;
             
               }
            } catch (e){
            }
            try {
                 var temp = x[i].getElementsByTagName("publisher")[0].childNodes[0].nodeValue + ", "
                 +  x[i].getElementsByTagName("date")[0].childNodes[0].nodeValue + ", "
             if (typeof temp !== "undefined"){
               publikation = temp ;
              
               }
            } catch (e){
            }
        
        autoren = "";
        
         for (let j=0; j< y[i].getElementsByTagName("item").length ; j++) {
           autoren +=  y[i].getElementsByTagName("item")[j].childNodes[0].nodeValue + "<br />"		
          }
          
        verlinkung = ""; 
        try {
                 var temp2 = x[i].getElementsByTagName("official_url")[0].childNodes[0].nodeValue;
             if (typeof temp2 !== "undefined"){
               l = "Publikation" ;
               var verlinkung = l.link(temp2);
               }
            } catch (e){
          }
          
        bibtex= "";
         var id = x[i].getElementsByTagName("eprintid")[0].childNodes[0].nodeValue;
         var url = "https://eref.uni-bayreuth.de/cgi/export/eprint/"+id+"/BibTeX/ubt_eref-eprint-"+id+".bib";
          l2 = "BibTeX";
          var bibtex = l2.link(url);
        

        table += "<tr><td>" + titel + publikation
        + "</td> <td> "+ autoren + "</td> <td> "+ verlinkung + "<br />" + bibtex

          }
        
          document.getElementById("demo").innerHTML = table + "</table>";
        

        }

        </script>
        

        so sieht das ganze Skript (zumindest der JS Teil) aus.
        PS: keine Ahnung warum der composer manches nicht "übersetzt" -.-

        OliverIO 1 Reply Last reply Reply Quote 0
        • OliverIO
          OliverIO @Waytlion last edited by OliverIO

          @waytlion said in Javascript Elemente Stylen:

          @oliverio
          alles klar, danke für deine Hilfe,

          so sieht das ganze Skript (zumindest der JS Teil) aus.
          PS: keine Ahnung warum der composer manches nicht "übersetzt" -.-

          folgendes habe ich festgestellt

          der Befehl var h = (xmlDoc.getElementsByTagName("publication") gibt eine HTMLCollection zurück
          also ein Array. Da gibt es das Attribut classList nicht
          https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection

          Von daher musst du deinen Befehl auf die einzelnen Elemente des Arrays anwenden

          h[0].classList.add("test")
          

          Bevor du das bei jeden einzelnen Element machst kannst du doch gleich eine tag-css-Regel erstellen

          <style>
          publication {
              color: red;
          }
          </style>
          

          ich fürchte nur das du da nicht ganz zum ziel kommst. du willst ja das im browser auch ausgeben wollen. dann sind da ja noch ne menge anderer xml-elemente die du wahrscheinlich nicht anzeigen willst. die verschwinden nicht von alleine.
          meiner Meinung nach hast du 2 Möglichkeiten

          1. das bereits erwähnte XSLT
            Hier ist ein Beispiel wie du das im Browser machen kannst.
            https://www.w3schools.com/xml/xsl_client.asp
            Herausforderung ist halt den XSL-Syntax noch zu lernen

          2. du wertest die Inhalte deines XML aus und baust eigene HTML-Elemente auf, in die du dann die Werte deiner xml-Elemente befüllst.
            Da kannst du dann schön mit div oder ähnliches arbeiten.

          Der browser weiß halt erst einmal nichts mit einem tag "publication" anzufangen und zeigt das als unformatierter text an.

          W 1 Reply Last reply Reply Quote 0
          • W
            Waytlion @OliverIO last edited by

            @oliverio
            Hey, hab es jetzt mit deinem ersten Lösungsansatz gelöst

            53d18654-ccaf-407a-9873-8aad901b1187-image.png

            Allerdings krieg ich es in meinem css part nicht gestyled -.-

            8e45a0c9-fe78-4eee-90ba-c4617c06c843-image.png

            OliverIO 1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @Waytlion last edited by OliverIO

              @waytlion said in Javascript Elemente Stylen:

              @oliverio
              Hey, hab es jetzt mit deinem ersten Lösungsansatz gelöst

              53d18654-ccaf-407a-9873-8aad901b1187-image.png

              Allerdings krieg ich es in meinem css part nicht gestyled -.-

              8e45a0c9-fe78-4eee-90ba-c4617c06c843-image.png

              ausgehend von deinem ursprünglichen skript hast du zwar das xml in die variable xmlDoc eingelesen. Da ist es nun.
              Aber du hast es noch nicht dem Dokumentenbaum des Browsers hinzugefügt. Daher weiß der Browser auch nicht das er es anzeigen soll.
              siehst du den irgend etwas von den xml daten auf dem Bildschirm?

              W 1 Reply Last reply Reply Quote 0
              • W
                Waytlion @OliverIO last edited by

                @oliverio
                Ja die Tabelle die ich erzeugt habe fkt super mit den XML Daten.
                Nur kriege ich das stylen einfach nicht hin.
                6a9a9739-baf1-459c-95cc-2d49ac830cb3-image.png

                OliverIO 1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO @Waytlion last edited by

                  @waytlion said in Javascript Elemente Stylen:

                  @oliverio
                  Ja die Tabelle die ich erzeugt habe fkt super mit den XML Daten.
                  Nur kriege ich das stylen einfach nicht hin.
                  6a9a9739-baf1-459c-95cc-2d49ac830cb3-image.png

                  mangels hellseherischer fähigkeiten kann ich ohne beispiel nichts machen.
                  woher soll ich den wissen wo dein fehler ist?

                  W 1 Reply Last reply Reply Quote 0
                  • W
                    Waytlion @OliverIO last edited by

                    @oliverio
                    Hab doch oben mein JS gepostet?!
                    Was meintest, dass ich noch schicken soll?

                    OliverIO 1 Reply Last reply Reply Quote 0
                    • OliverIO
                      OliverIO @Waytlion last edited by

                      @waytlion
                      sorry das skript ist so zerrupft, hab den rest nicht gesehen.

                      definition als leerer String=ok

                      publikation = "";
                      

                      zuweisung der inhalte als string ok

                      publikation = "in:  " + x[i].getElementsByTagName("publication")[0].childNodes[0].nodeValue ;
                      

                      zuweisung einer css klasse zu einem string kann nicht funktionieren. string hat keine methode mit diesem namen. das müsste zu einem fehler führen, daher hat dieser string auch keine klasse.

                      publikation.classList.add("mystyle");
                      

                      Alternativ

                      publikation = '<p class="mystyle">in:  ' + x[i].getElementsByTagName("publication")[0].childNodes[0].nodeValue + '</p>';
                      

                      du kannst im browser das erzeugte html im detail prüfen, wenn du rechte maustaste auf den text machst und "Untersuchen" oder so ähnlich klickst (je nach browser).
                      damit kommst du in die developer tools

                      hier mal komplett korrekt formatiert

                      <script>
                      function loadXMLDoc() {
                      var xmlhttp = new XMLHttpRequest();
                      xmlhttp.onreadystatechange = function() {
                      if (this.readyState == 4 && this.status == 200) {
                      myFunction(this);
                      }
                      };
                      xmlhttp.open("GET", "http://eref.uni-bayreuth.de/XML/person_gndid/13330955X.xml", true);
                      xmlhttp.send();
                      }
                      function myFunction(xml) {
                      var xmlDoc = xml.responseXML;
                      
                      var h = (xmlDoc.getElementsByTagName("publication"));
                      h.classList.add("mystyle");
                      // xmlDoc.getElementsByTagName("publication").style.color = "red";
                      
                        var table= "<table> <tr><th width= 30%>Titel</th><th width=10% >Beteiligte</th><th width =5%>Link</th></tr>";
                        var x = xmlDoc.getElementsByTagName("eprint");
                        var y = xmlDoc.getElementsByTagName("person_search");
                        var z = xmlDoc.getElementsByTagName("abstract_original");
                          
                      for (let i = 0; i <x.length; i++) {
                      
                      titel = x[i].getElementsByTagName("title")[0].childNodes[0].nodeValue + "<br />";
                      
                      publikation = "";
                          
                        
                          if (x[i].getElementsByTagName("publication").length == 1){
                             publikation = "in:  " + x[i].getElementsByTagName("publication")[0].childNodes[0].nodeValue ;
                             publikation.classList.add("mystyle");
                            }
                      
                          
                          try {
                               var temp = x[i].getElementsByTagName("event_title")[0].childNodes[0].nodeValue + ", "
                               +  x[i].getElementsByTagName("event_location")[0].childNodes[0].nodeValue + ", "
                               +  x[i].getElementsByTagName("event_dates")[0].childNodes[0].nodeValue + ", ";
                           if (typeof temp !== "undefined"){
                             publikation = "presented at:  " + temp ;
                           
                             }
                          } catch (e){
                          }
                          try {
                               var temp = x[i].getElementsByTagName("publisher")[0].childNodes[0].nodeValue + ", "
                               +  x[i].getElementsByTagName("date")[0].childNodes[0].nodeValue + ", "
                           if (typeof temp !== "undefined"){
                             publikation = temp ;
                            
                             }
                          } catch (e){
                          }
                      
                      autoren = "";
                      
                       for (let j=0; j< y[i].getElementsByTagName("item").length ; j++) {
                         autoren +=  y[i].getElementsByTagName("item")[j].childNodes[0].nodeValue + "<br />"		
                        }
                        
                      verlinkung = ""; 
                      try {
                               var temp2 = x[i].getElementsByTagName("official_url")[0].childNodes[0].nodeValue;
                           if (typeof temp2 !== "undefined"){
                             l = "Publikation" ;
                             var verlinkung = l.link(temp2);
                             }
                          } catch (e){
                        }
                        
                      bibtex= "";
                       var id = x[i].getElementsByTagName("eprintid")[0].childNodes[0].nodeValue;
                       var url = "https://eref.uni-bayreuth.de/cgi/export/eprint/"+id+"/BibTeX/ubt_eref-eprint-"+id+".bib";
                        l2 = "BibTeX";
                        var bibtex = l2.link(url);
                      table += "<tr><td>" + titel + publikation
                      + "</td> <td> "+ autoren + "</td> <td> "+ verlinkung + "<br />" + bibtex
                      
                        }
                       
                        document.getElementById("demo").innerHTML = table + "</table>";
                      }
                      
                      </script>
                      
                      W 1 Reply Last reply Reply Quote 0
                      • W
                        Waytlion @OliverIO last edited by

                        @oliverio said in Javascript Elemente Stylen:

                        publikation = '<p class="mystyle">in: ' + x[i].getElementsByTagName("publication")[0].childNodes[0].nodeValue + '</p>';

                        vielen vielen Dank für den Tipp! Versteh nicht wie ich den in 2 Stunden googlen nicht finden konnte xD

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        938
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        2
                        11
                        238
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo