Knuth: script/noscript in Tabelle

Moin
Ich wollte eine Tabellenzeile unterschiedlich machen, je nachdem scripting aktiviert ist oder nicht.
Nun sagt der HTML-Validator:
Warnung: <noscript> ist in <table> Elementen nicht erlaubt
1. Muss ich dann tatsächlich die komplette Tabelle einmal in der
   Script-Version und einmal in der noscript-Version angeben?
2. Gibt es in Javascript die Möglichkeit mit document.write(....)
   oder anders mehrzeiligen Text mit Sonderzeichen, wie ' " / etc.
   auszugeben?
Grüße
Knuth

  1. Hi,

    Ich wollte eine Tabellenzeile unterschiedlich machen, je nachdem scripting aktiviert ist oder nicht.
    Nun sagt der HTML-Validator:
    Warnung: <noscript> ist in <table> Elementen nicht erlaubt

    1. Muss ich dann tatsächlich die komplette Tabelle einmal in der
         Script-Version und einmal in der noscript-Version angeben?

    Nö. Z.B.:
    Setz die Tabelle in der noscript-Version ins Dokument.
    Setze dahinter ein script-Element, in dem Du die nötigen Umbauten an der Tabelle per Script vornimmst.

    1. Gibt es in Javascript die Möglichkeit mit document.write(....)
         oder anders mehrzeiligen Text mit Sonderzeichen, wie ' " / etc.
         auszugeben?

    Du müßtest die Backslashes und Zeilenumbrüche sowie die Anführungszeichen, die als Begrenzer des Strings dienen, per \ escapen.

    Also z.B.:
    alert("test"\"test\ test");

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hi, Andreas,
      mir ist leider nicht klar, wie ich das anstellen kann.
      Als Beispiel:

      ....
      1  <td>
      2    <form action="..Addr1.." method="post" name="formular">
      3    <input type="image" src="kontakt.jpg" alt="Kontakt">
      4    <input ......>
      5    <input ......>
      6  </td>

      Wie kann ich obige Zeile 3 mit javascript ersetzen durch

      <input type="image" src="kontakt.jpg" alt="Kontakt"
                 onmouseover=document.formular.action=es()>       <====

      Wie kann ich Zeile 4 löschen?
      Wie könnte ich zwischen Zeile 5 und 6 etwas einfügen?
      Gruß
      Knuth

      1. 2    <form action="..Addr1.." method="post" name="formular">
        3    <input type="image" src="kontakt.jpg" alt="Kontakt">
        4    <input ......>
        5    <input ......>
        6  </td>

        Wie kann ich obige Zeile 3 mit javascript ersetzen durch

        <input type="image" src="kontakt.jpg" alt="Kontakt"
                   onmouseover=document.formular.action=es()>       <====

        Wie kann ich Zeile 4 löschen?
        Wie könnte ich zwischen Zeile 5 und 6 etwas einfügen?

        wieso willst du das?

        Dass sind doch zwei völlig identische Elemente, ausser dem onmouseover Event und der wird bei abgeschaltetem JS einfach nciht ausgeführt.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. Wie kann ich Zeile 4 löschen?
          Wie könnte ich zwischen Zeile 5 und 6 etwas einfügen?

          wieso willst du das?

          Dass sind doch zwei völlig identische Elemente, ausser dem onmouseover Event und der wird bei abgeschaltetem JS einfach nciht ausgeführt.

          Struppi.

          Da hast Du Recht, aber wie sieht es grundsätzlich mit Ersetzungen, Einfügungen und Löschungen aus?

          1. Da hast Du Recht, aber wie sieht es grundsätzlich mit Ersetzungen, Einfügungen und Löschungen aus?

            So:

            <td>  
            <form action="..Addr1.." method="post" name="formular">  
            <noscript>  
            <input type="image" src="kontakt.jpg" alt="Kontakt">  
            </noscript>  
            <script type="text/javascript">  
            
            ~~~~~~javascript
            document.write('<input type="image" src="kontakt.jpg" alt="Kontakt" onmouseover=document.formular.action="es()">');  
            
            ~~~~~~html
            </script>  
            <input ......>  
            <input ......>  
            </td>  
            
            

            Struppi.

            --
            Javascript ist toll (Perl auch!)
            1. So weit war ich schon, nur das Problem war (siehe mein erstes Posting),
              dass noscript innerhalb von Tabellen nicht verwendet werden soll.
              Ich müsste demnach zwei Tabellen erstellen oder eine Tabelle und nach der Tabelle mit Javascript Veränderungen vornehmen.
              Daher die Frage nach Änderung,Löschung,Einfügung.
              Gruß
              Knuth

              1. So weit war ich schon, nur das Problem war (siehe mein erstes Posting),
                dass noscript innerhalb von Tabellen nicht verwendet werden soll.

                Wer sagt das?
                ein noscript Block innerhalb von <td> </td> ist kein Problem.

                vielleicht solltest du mal ein konkretes Beispiel zeigen.

                Struppi.

                --
                Javascript ist toll (Perl auch!)
                1. Wer sagt das?

                  Tidy HTML Validator

                  ein noscript Block innerhalb von <td> </td> ist kein Problem.

                  vielleicht solltest du mal ein konkretes Beispiel zeigen.

                    
                  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">  
                  <html>  
                   <head>  
                    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
                    <title>  
                    </title>  
                   </head>  
                   <body>  
                    <table border="0" width="100%">  
                     <tr>  
                      <td><noscript>aaaaa</noscript></td>     <!-- ok    -->  
                      <td>bbbbb</td>  
                     </tr>  
                  <noscript>                                  <!-- * -->  
                     <tr>  
                      <td>cccc</td>  
                      <td>dddd</td>  
                     </tr>  
                  </noscript>                                 <!-- * -->  
                     <tr>  
                      <td>eeee</td>  
                      <td>ffff</td>  
                     </tr>  
                    </table>  
                   </body>  
                  </html>  
                  
                  

                  * ... 6 Warnungen von Tidy HTML Validator

                  Eigentlich unlogisch oder? Sinnvoll ist es doch auch, ganze Zeilen unterschiedlich zu behandeln und nicht nur Spalten - oder sehe ich das falsch?
                  Gruß
                  Knuth

                  1. Hallo Knuth.

                    […]
                      <table border="0" width="100%">
                       <tr>
                        <td><noscript>aaaaa</noscript></td>     <!-- ok    -->
                        <td>bbbbb</td>
                       </tr>
                    <noscript>                                  <!-- * -->
                       <tr>
                        <td>cccc</td>
                        <td>dddd</td>
                       </tr>
                    </noscript>                                 <!-- * -->
                       <tr>
                        <td>eeee</td>
                        <td>ffff</td>
                       </tr>
                      </table>
                    </body>
                    </html>

                    
                    >   
                    > \* ... 6 Warnungen von Tidy HTML Validator  
                    >   
                    > Eigentlich unlogisch oder?  
                      
                    Nicht im geringsten. Das noscript–Element ist direkt innerhalb des table–Elements nicht erlaubt, in Tabellenzellen dagegen schon.  
                      
                      
                    Einen schönen Donnerstag noch.  
                      
                    Gruß, Mathias  
                    
                    -- 
                    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|  
                    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“  
                    [[HTML Design Constraints: Logical Markup](http://www.w3.org/History/19921103-hypertext/hypertext/WWW/MarkUp/HTMLConstraints.html)]
                    
                    1. Hallo,
                      Was ist daran logisch, wenn ich einen Teil einer Zeile aus/einblenden kann mit noscript aber nicht die ganze Zeile?
                      Gruß
                      Knuth

                      1. Hallo Knuth.

                        Was ist daran logisch, wenn ich einen Teil einer Zeile aus/einblenden kann mit noscript aber nicht die ganze Zeile?

                        Lies bitte mein Posting noch einmal.

                        Einen schönen Donnerstag noch.

                        Gruß, Mathias

                        --
                        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                        [HTML Design Constraints: Logical Markup]
                        1. Lies bitte mein Posting noch einmal.

                          Sorry, verstehe nicht, was Du meinst, die HTML Design constraints?
                          Ich kann nur logisch denken und das sagt mir,
                          warum kann ich keine ganze Tabellenzeile mit <noscript></noscript>
                          markieren, wohl aber einen Teil (eine Spalte) davon?

                          <noscript><table><tr>..<td>..</td>..</tr>..</table></noscript>  <= ok

                          <table><noscript><tr>..<td>..</td>..</tr></noscript>..</table>  <= nein

                          <table><tr>..<td><noscript>..</noscript></td>..</tr>..</table>  <= ok

                          Also mir leuchtet dies nicht ein.
                          Gruß

                          1. warum kann ich keine ganze Tabellenzeile mit <noscript></noscript>
                            markieren, wohl aber einen Teil (eine Spalte) davon?

                            du kannst auch keine Spalte im noscript Teil ausgeben, sondern nur Inhalt.
                            Eben keine Fragmente eines Elementes (eine ganze Tablle geht)

                            Struppi.

                            --
                            Javascript ist toll (Perl auch!)
                            1. du kannst auch keine Spalte im noscript Teil ausgeben, sondern nur Inhalt.

                              Genau so könnte ich sagen:
                              Du kannst auch keine Tabelle ausgeben, sondern nur den Inhalt.
                              Du kannst auch keine Zeile ausgeben, sondern nur den Inhalt.
                              Oder verstehe ich <noscript> falsch?
                              Ich dachte 'alles was zwischen <noscript> und </noscript> steht soll dann interpretiert werden, wenn Script ausgeschaltet ist und es soll
                              n i c h t   interpretiert werden (heißt für mich als ob es nicht vorhanden wäre), wenn Scripting aktiviert ist.
                              Folgerichtig hieße das in untenstehendem Beispiel.
                              Die erste Zeile der Tabelle ist sichtbar bzw. unsichtbar, je nach Skript-Aktivierung.

                              <table>
                              <noscript>
                              <tr>
                              ........
                              </tr>
                              </noscript>
                              <tr>
                              .....
                              </tr>
                              </table>

                              Wenn ich jetzt eine ganze Zeile ausblenden will, so durch
                               <tr>
                                <td><noscript>4,1</noscript></td>
                                <td><noscript>4,2</noscript></td>
                                <td><noscript>4,3</noscript></td>
                               </tr>
                              Das sieht natürlich bescheiden aus, wenn Skripting aktiviert ist und die Tabelle hat Ränder, dann sieht man nämlich die leere Zeile.
                              Also ich meine, man kann allenfalls sagen, es ist nun mal so.
                              Aber logisch ist es nicht.
                              Schönen Tag noch wünscht
                              Knuth

                              1. du kannst auch keine Spalte im noscript Teil ausgeben, sondern nur Inhalt.
                                Genau so könnte ich sagen:
                                Du kannst auch keine Tabelle ausgeben, sondern nur den Inhalt.
                                Du kannst auch keine Zeile ausgeben, sondern nur den Inhalt.

                                Mit Inhalt meine ich, Code, der komplett darstellbar ist <tr><td>...</td></tr> ist ein unvollständiges Fragment.

                                Oder verstehe ich <noscript> falsch?
                                Ich dachte 'alles was zwischen <noscript> und </noscript> steht soll dann interpretiert werden, wenn Script ausgeschaltet ist und es soll
                                n i c h t   interpretiert werden (heißt für mich als ob es nicht vorhanden wäre), wenn Scripting aktiviert ist.

                                Ja, eben, deshalb wäre es unklug Fragemente innerhalb noscript zu zulassen.

                                Das sieht natürlich bescheiden aus, wenn Skripting aktiviert ist und die Tabelle hat Ränder, dann sieht man nämlich die leere Zeile.
                                Also ich meine, man kann allenfalls sagen, es ist nun mal so.
                                Aber logisch ist es nicht.

                                Doch ist es.
                                Aber ich vermute auch, dass du hier ein Tabelle als Layoutgerüst mißbrauchen möchtest. Wozu sonst sollte man den Wunsch haben eine Tabelle in Abhängigkeit von JS anzuzeigen. Entweder du willst tabellarische Daten darstellen oder nicht und wenn du Abhängigeiten mit JS hast, läßt sich das einfach bewerkstelligen in dem du nach dem schliessenden table-Tag deine Operationen ausführst.

                                Struppi.

                                --
                                Javascript ist toll (Perl auch!)
                                1. Ja, eben, deshalb wäre es unklug Fragemente innerhalb noscript zu zulassen.

                                  Wenn es Fragmente wären, so wären es ja auch Fragmente, wenn <noscript> weggelassen wird. Denn durch Entfernung von Teilen wird aus einem Fragment nicht ein Ganzes.

                                  Das sieht natürlich bescheiden aus, wenn Skripting aktiviert ist und die Tabelle hat Ränder, dann sieht man nämlich die leere Zeile.
                                  Also ich meine, man kann allenfalls sagen, es ist nun mal so.
                                  Aber logisch ist es nicht.

                                  Doch ist es.

                                  Hast Du Dir einmal angeschaut, wie es aussieht?

                                  ...., läßt sich das einfach bewerkstelligen in dem du nach dem schliessenden table-Tag deine Operationen ausführst.

                                  Da konntest Du mir zwar (weiter oben im Thread) erläutern, wie man eine Zeile korrigiert, nicht aber, wie man eine Zeile löscht bzw. eine Zeile nachträglich einfügt.

                                  Mit Inhalt meine ich, Code, der komplett darstellbar ist <tr><td>...</td></tr> ist ein unvollständiges Fragment.

                                  Wieso ist dies unvollständig?
                                  <td>...</td> ist als Untermenge des obigen erst recht unvollständig und da ist es ja zulässig!
                                  Mit <tr><td>...</td></tr> wird eine komplette Zeile mit x Spalten definiert, also nicht unvollständig!
                                  Diese Zeile ist vorhanden, je nach Script-Aktivierung.
                                  Dies ist ja so offensichtlich zumindest in Netscape und Mozilla so realisiert und funktioniert einwandfrei. Vermutlich ist es bei anderen Browsern ähnlich.
                                  Gruß
                                  Knuth

                                  1. Doch ist es.
                                    Hast Du Dir einmal angeschaut, wie es aussieht?
                                    ...., läßt sich das einfach bewerkstelligen in dem du nach dem schliessenden table-Tag deine Operationen ausführst.

                                    Da konntest Du mir zwar (weiter oben im Thread) erläutern, wie man eine Zeile korrigiert, nicht aber, wie man eine Zeile löscht bzw. eine Zeile nachträglich einfügt.

                                    Du kennst selfhtml ==> removeChild und appendChild

                                    Mit Inhalt meine ich, Code, der komplett darstellbar ist <tr><td>...</td></tr> ist ein unvollständiges Fragment.
                                    Wieso ist dies unvollständig?

                                    Weil mindestens noch die table Tags fehlen.

                                    <td>...</td> ist als Untermenge des obigen erst recht unvollständig und da ist es ja zulässig!

                                    Und nochmals Nein, es ist innerhalb von <td> </td> zulässig
                                    <td> <noscript> </noscript> </td>  ---> JA
                                    <noscript> <td> </td>  </noscript> ---> NEIN

                                    Mit <tr><td>...</td></tr> wird eine komplette Zeile mit x Spalten definiert, also nicht unvollständig!

                                    Es ist eine unvollständige Tabelle innerhalb eines noscript Blocks, wieso ist das so schwer zu begreifen?

                                    Dies ist ja so offensichtlich zumindest in Netscape und Mozilla so realisiert und funktioniert einwandfrei. Vermutlich ist es bei anderen Browsern ähnlich.

                                    Keine Ahnung, die Browser haben alle viele Mechanismen um Fehler der HTML Autoren zu korrigieren, aber das hat nichts zu bedeuten. Wenn du dich auf etwas verlassen willst, solltest du zumindest versuchen es nach den Regeln umzusetzen auf die das ganze aufbaut.

                                    Struppi.

                                    --
                                    Javascript ist toll (Perl auch!)
                                    1. Wer nichts begreift, bist Du, oder möchtest Du unbedingt Recht behalten.
                                      Also seis drum!
                                      Zum Glück sind die Browserhersteller nicht so verbohrt und reagieren so, wie es ein logisch denkender Anwender erwaertet.
                                      Und tschüs

                                      1. Wer nichts begreift, bist Du, oder möchtest Du unbedingt Recht behalten.

                                        Nein, will ich nicht, aber offensichtlich reicht mein Erklärungsvermögen nicht aus.

                                        Nochmal du hast ein Element <noscript> innerhalb diesem darfst du keine Tabellenfragemente einfügen. Genausowenig wie z.b. innerhalb eines <p> Tags.

                                        Zum Glück sind die Browserhersteller nicht so verbohrt und reagieren so, wie es ein logisch denkender Anwender erwaertet.

                                        Wie gesagt, es ist falsch und steht auch so in den Specs, wenn es die dir zu Verfügung stehenden Browser so machen und dir das ausreicht, ist es auch kein Problem.
                                        Aber das hat nichts mit Recht haben oder verbohrt sein zu tun (wobei ich mich Frage, wie man das nennt wenn jemand unbedingt etwas machen will was nicht vorgesehen ist), es ist so definiert und ob es Gründe hat oder nicht.

                                        Und nach wievor Frage ich mich, warum man sowas überhaupt braucht, auf meine Vermutung dass du offensichtlich eine Tabelle als Layoutelement mißbrauchst bist du gar nicht eingegangen. Evtl. liesse sich dein Problem anders viel einfacher lösen, aber wenn du unbedingt auf die falsche Lösung bestehst will ich dir das gar nicht ausreden.

                                        Struppi.

                                        --
                                        Javascript ist toll (Perl auch!)
                          2. Hallo Knuth.

                            Lies bitte mein Posting noch einmal.
                            Sorry, verstehe nicht, was Du meinst, die HTML Design constraints?

                            Meine Signatur meinte ich eigentlich nicht, aber es freut mich, dass du sie gelesen hast.

                            warum kann ich keine ganze Tabellenzeile mit <noscript></noscript>
                            markieren, wohl aber einen Teil (eine Spalte) davon?

                            Weil das in der (X)HTML–DTD so festgelegt wurde:

                            <!ELEMENT TABLE - -  
                                 (CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)>
                            

                            Ich gehe nicht ins Detail, aber die Angaben in der Klammer geben die im table–Element erlaubten Elemente an. Und wie du siehst, zählt noscript nicht dazu.

                            <!ELEMENT THEAD    - O (TR)+           -- table header -->  
                            <!ELEMENT TFOOT    - O (TR)+           -- table footer -->  
                            <!ELEMENT TBODY    O O (TR)+           -- table body -->
                            

                            Hier ebenso; hier ist zudem einzig und allein das tr–Element als Kindelement erlaubt.

                            Also mir leuchtet dies nicht ein.

                            Konnte ich dich ein wenig erleuchten?

                            Einen schönen Donnerstag noch.

                            Gruß, Mathias

                            --
                            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                            „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                            [HTML Design Constraints: Logical Markup]
                            1. Hallo,

                              Konnte ich dich ein wenig erleuchten?

                              Du konntest mich insofern 'erleuchten', als dass es so von klugen Leuten festgelegt wurde.
                              Das habe ich nie bezweifelt, denn deshalb hat es Tiny ja wohl angemeckert.
                              Ich habe allerdings jetzt dort ((X)HTML–DTD) auch nicht gefunden, dass es im <td>-Block erlaubt ist!
                              Aber was Menschen festlegen, muß nicht unbedingt logisch sein - denk an unsere Steuergesetze.
                              Was daran unlogisch ist, habe ich in meinem Posting von soeben versucht zu erläutern.
                              Gruß
                              von Knuth

                              1. Hallo Knuth.

                                Ich habe allerdings jetzt dort ((X)HTML–DTD) auch nicht gefunden, dass es im <td>-Block erlaubt ist!

                                Es ist über ein paar Ecken herauszufinden:

                                <!ELEMENT (TH|TD) - O (%flow;)* -- table header cell, table data cell-->

                                Hierbei ist %flow; eine Referenz, wir folgen dieser also zruück:

                                <!ENTITY % flow "%block; | %inline;">

                                Und wieder eine Referenz:

                                <!ENTITY % block  
                                     "P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT |  
                                      BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS">
                                

                                Und da ist unser noscript.

                                Aber was Menschen festlegen, muß nicht unbedingt logisch sein - denk an unsere Steuergesetze.

                                Gänzliche Zustimmung.

                                Einen schönen Donnerstag noch.

                                Gruß, Mathias

                                --
                                sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                                „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                                [HTML Design Constraints: Logical Markup]
                    2. Hi,

                      Nicht im geringsten. Das noscript–Element ist direkt innerhalb des table–Elements nicht erlaubt,

                      Es steht hier aber innerhalb eines tbody-Elements, nicht direkt innerhalb des table-Elements.
                      Erlaubt ist es dort aber auch nicht.

                      cu,
                      Andreas

                      --
                      Warum nennt sich Andreas hier MudGuard?
                      Schreinerei Waechter
                      O o ostern ...
                      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.