Benutzer-Werkzeuge

Webseiten-Werkzeuge


javascript

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
javascript [2022-01-09 23:48:54] – [table auto full colspan] davidjavascript [2023-01-18 15:43:23] (aktuell) – [test api] david
Zeile 3: Zeile 3:
 JavaScript (JS) ist eine dynamisch typisierte Programmiersprache (Skriptsprache), die von Netscape für dynamisches HTML in Webbrowsern entwickelt wurde. Der Sprachkern ist als ECMAScript standardisiert. JavaScript ermöglicht vor allem clientseitige Manipulation des HTML DOMs, wird aber immer mehr auch außerhalb des Browsers benutzt (wie z.B. in Node oder Deno, Laufzeitumgebungen für Java- bzw. TypeScript). JavaScript ist zusammen mit [[html|HTML]] und [[css|CSS]] eine der Kernsprachen des World Wide Webs (WWW). JavaScript (JS) ist eine dynamisch typisierte Programmiersprache (Skriptsprache), die von Netscape für dynamisches HTML in Webbrowsern entwickelt wurde. Der Sprachkern ist als ECMAScript standardisiert. JavaScript ermöglicht vor allem clientseitige Manipulation des HTML DOMs, wird aber immer mehr auch außerhalb des Browsers benutzt (wie z.B. in Node oder Deno, Laufzeitumgebungen für Java- bzw. TypeScript). JavaScript ist zusammen mit [[html|HTML]] und [[css|CSS]] eine der Kernsprachen des World Wide Webs (WWW).
  
-===== Beispielprogramme =====+JS kann auch als Sprache für das backend genutzt werden. Dazu gibt es die JS runtime [[https://nodejs.org/|NodeJS]], welche auf Chromium's V8 JavaScript engine aufbaut. Eine neuere Alternative vom gleichen Erfinder ist [[https://deno.land/|Deno]] (Anagram von Node). Deno setzt auf eingebauten TypeScript Support und keine Paketverwaltung (sondern Import von Modulen mit URLs), unterstützt aber auch klassisches JS.
  
 +  * [[https://google.github.io/styleguide/jsguide.html|Google JavaScript Style Guide]]
  
-==== table auto full colspan ==== 
  
-Dieses Programm setzt automatisch (nachdem das DOM geladen istdie Spannbreite (colspan) jeder Tabellenzelle, welche die definierte Klasse (hier "**.colspan-full**") hat, auf den richtigen Wert, damit die Zelle die Breite der vollen Tabelle einnimmt. Diese Funktion wird von HTML 5 leider noch nicht unterstützt.+===== ECMAScript modules (ESM=====
  
-Achtung: Die Tabelle muss folgendermaßen aufgebaut sein: **table>thead>tr>thtd** +  [[https://developer.mozilla.org/docs/Web/JavaScript/Guide/Modules]] 
-Beispiel: + 
-<code html> +JavaScript Module (auch ES6 Module genannt) ermöglichen das Aufteilen des Codes und exportieren bzw. importieren von FunktionenKlassen, Objekten usw. 
-<table+ 
-    <thead+==== Beispiel ==== 
-        <tr+ 
-            <th scope="col"></th+<code html index.html> 
-            <th scope="col"></th> +<!DOCTYPE html
-            <th scope="col"></th+<html lang="en"
-        </tr+    <head
-    </thead+        <meta charset="UTF-8"> 
-    <tbody+        <meta name="viewportcontent="width=device-width, initial-scale=1.0"> 
-        <tr+        <title>Test</title
-            <td class="colspan-full"></td+    </head
-        </tr+    <body
-    </tbody+        <h1>Test</h1
-</table>+ 
 +        <script src="./script.js" type="module"></script
 +        <script src="./object.js" type="module"></script
 +    </body
 +</html>
 </code> </code>
 +
 +<code javascript script.js>
 +"use strict";
 +
 +import { obj as object } from "./object.js";
 +
 +const x = object(42);
 +const child = document.createElement("p");
 +child.innerText = x.value;
 +
 +document.querySelector("body").appendChild(child);
 +</code>
 +
 +<code javascript object.js>
 +"use strict";
 +
 +const object = (x) => {
 +    return {
 +        value: x,
 +    };
 +};
 +
 +export { object as obj };
 +</code>
 +
 +===== AJAX/AJAJ (fetch) =====
 +
 +  * __AJAX__ steht für //Asynchronous JavaScript and XML//. Man spricht heutzutage zwar immer noch oft von AJAX und nicht von AJAJ, obwohl die meisten APIs mittlerweile das kompaktere und weniger komplexe JSON nutzen.
 +  * __fetch__ ist eine moderne Alternative zu __XMLHttpRequest__ (XHR). fetch arbeitet komplett **asynchron** und gibt ein **Promise** zurück, während XHR **synchron** und **asynchron** verwendet werden kann und mit **callbacks** arbeitet.
  
 <code javascript> <code javascript>
 +const response = await fetch("/api/test", {
 +    method: "get",
 +    headers: {
 +      "Content-Type": "application/json"
 +    }
 +});
 +console.info(`status: ${response.status}`);
 +let json;
 +try {
 +    json = await response.json();
 +} catch (e) {
 +    console.error(e);
 +    json = JSON.stringify({});
 +} finally {
 +    console.info(json);
 +}
 +</code>
 +
 +===== Beispielprogramme =====
 +
 +
 +==== backend ====
 +
 +
 +=== test api ===
 +
 +API zum testen: Alle Anfragen werden geloggt und mit "Hello World!" und dem Status Code 418 (I'm a teapot) beantwortet.
 +
 +<code javascript test.js>
 "use strict"; "use strict";
-window.addEventListener("DOMContentLoaded", () => { + 
-    let class = ".colspan-full"; +import express from "express"; 
-    let span = document.querySelectorAll(class); + 
-    for (let e of span) {+const app = express(); 
 +const port = process.env.PORT || 3000; 
 + 
 +app.use(express.json()); 
 +app.use((req, res, next) => { 
 +    const payload = { 
 +        body: req.body ?? null, 
 +        headers: req.headers ?? null, 
 +        url: req.url ?? null, 
 +    }; 
 +    console.log(payload); 
 +    res.status(418); 
 +    res.send("Hello World!"); 
 +    next(); 
 +}); 
 + 
 +app.listen(port); 
 +console.info(`Express started on port ${port}`); 
 + 
 +</code> 
 + 
 +<code json package.json> 
 +
 +  "name": "test", 
 +  "version": "1.0.0", 
 +  "license": "MIT", 
 +  "type": "module", 
 +  "main": "test.js", 
 +  "dependencies":
 +    "express": "^4.18.2" 
 +  }, 
 +
 + 
 +</code> 
 + 
 + 
 +=== hello world webserver (deno) === 
 + 
 +<code javascript hello-world.ts> 
 +import { serve } from "https://deno.land/std@0.126.0/http/server.ts"; 
 + 
 +const port = 80; 
 + 
 +const handler = (): Response => { 
 +    return new Response("Hello World!"); 
 +}; 
 + 
 +serve(handler, { port }); 
 +console.log(`Listening on http://localhost:${port}`); 
 + 
 +</code> 
 + 
 + 
 +==== frontend ==== 
 + 
 + 
 +=== table auto full colspan === 
 + 
 +Dieses Programm setzt automatisch (nachdem das DOM geladen ist) die Spannbreite (colspan) jeder Tabellenzelle, welche durch den definierten Selektor (hier die Klasse "**.colspan-full**") erfasst wird, auf den richtigen Wert, damit die Zelle die Breite der vollen Tabelle einnimmt. Diese Funktion wird von HTML 5 leider noch nicht unterstützt, weshalb dieses Skript eine einfache Lösung darstellt. 
 + 
 +<code html> 
 +<!DOCTYPE html> 
 +<html lang="en"> 
 +    <head> 
 +        <meta charset="UTF-8"> 
 +        <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
 +        <link rel="stylesheet" href="./styles.css"> 
 +        <title></title> 
 +    </head> 
 +    <body> 
 +        <table id="test" aria-label="example table"> 
 +            <thead> 
 +                <tr> 
 +                    <th scope="col">1</th> 
 +                    <th scope="col">2</th> 
 +                    <th scope="col">3</th> 
 +                </tr> 
 +            </thead> 
 +            <tbody> 
 +                <tr> 
 +                    <td>1.1</td> 
 +                    <td>1.2</td> 
 +                    <td>1.3</td> 
 +                </tr> 
 +            </tbody> 
 +            <tfoot> 
 +                <tr> 
 +                    <td class="colspan-full">span</td> 
 +                </tr> 
 +            </tfoot> 
 +        </table> 
 + 
 +        <script type="module" src="./scripts.js"></script> 
 +    </body> 
 +</html> 
 +</code> 
 + 
 +<code css styles.css> 
 +#test { 
 +    width: 100%; 
 +    border-collapse: collapse; 
 +    border: 1px solid black; 
 +
 + 
 +#test th, 
 +#test td { 
 +    text-align: left; 
 +    border: 1px solid black; 
 +    padding: 0.5rem; 
 +
 + 
 +.colspan-full { 
 +    text-align: center !important; 
 +
 +</code> 
 + 
 +<code javascript scripts.ts> 
 +globalThis.addEventListener("DOMContentLoaded", () => { 
 +    const selector = ".colspan-full"; 
 +    const elements = document.querySelectorAll(selector); 
 +    for (const e of elements) {
         let table = e.parentElement;         let table = e.parentElement;
-        while (table.tagName.toLowerCase() !== "table") { +        if (table == null) continue; 
-            table = table.parentElement;+        while (table?.tagName.toLowerCase() !== "table") { 
 +            table = table?.parentElement ?? null;
         }         }
  
-        if (table !== undefined{ +        if (table == nullconsole.error("couldn't find the table!"); 
-            let columnCount = table + 
-                .querySelector("thead"+        const columnCount = table 
-                .querySelector("tr"+            .querySelector("thead"
-                .querySelectorAll("th, td").length; +            ?.querySelector("tr"
-            e.setAttribute("colspan", columnCount); +            ?.querySelectorAll("th, td").length ?? 0
-        } else { +        e.setAttribute("colspan", columnCount.toString());
-            console.warn("couldn't find the table!"); +
-        }+
     }     }
 }); });
 +
 </code> </code>
  
  
/home/http/wiki/data/attic/javascript.1641772134.txt · Zuletzt geändert: von david