{"id":32655,"date":"2025-05-13T23:33:18","date_gmt":"2025-05-14T02:33:18","guid":{"rendered":"https:\/\/mastertrend.info\/?p=32655"},"modified":"2026-04-28T14:50:55","modified_gmt":"2026-04-28T17:50:55","slug":"skapa-din-forsta-webbapp","status":"publish","type":"post","link":"https:\/\/mastertrend.info\/sv\/crea-tu-primera-app-web\/","title":{"rendered":"Skapa din f\u00f6rsta webbapp och bem\u00e4stra programmering utan stress \ud83d\ude80\ud83d\udcbb"},"content":{"rendered":"<h2 class=\"table-content-link\">Skapa din f\u00f6rsta webbapp: anteckningar + r\u00e4knare enkelt och snabbt \ud83d\udcdd\u26a1<\/h2>\n<p>Att komma ig\u00e5ng med programmering kan verka \u00f6verv\u00e4ldigande, med s\u00e5 m\u00e5nga spr\u00e5k, ramverk och metoder att ta h\u00e4nsyn till. Ibland kan det verka enklare att delegera allt till en AI. Oroa dig inte! Programmering f\u00f6r webben kan vara enkelt, roligt och b\u00e4st av allt, helt gratis! \ud83c\udf10\u2728<\/p>\n<h2 id=\"what-you-rsquo-ll-build\">Vad du ska bygga<\/h2>\n<p>Genom att f\u00f6lja den h\u00e4r handledningen skapar du en enkel webbapplikation f\u00f6r att lagra textanteckningar och r\u00e4kna tecken och ord.<\/p>\n<p>Appen lagrar data, s\u00e5 den kommer ih\u00e5g texten n\u00e4r du laddar om eller \u00f6ppnar sidan igen. Det betyder att du har ett bekv\u00e4mt s\u00e4tt att spara all text du vill referera till senare, till exempel adresser, webbadresser etc. \ud83d\udcc4\ud83d\udd17<\/p>\n<figure><picture><source media=\"(min-width: 1024px)\" data-=\"\" \/><source media=\"(min-width: 768px)\" data-=\"\" \/><source media=\"(min-width: 481px)\" data-=\"\" \/><source media=\"(min-width: 0px)\" data-=\"\" \/><img decoding=\"async\" style=\"display: block; height: auto; max-width: 100%;\" src=\"https:\/\/mastertrend.info\/wp-content\/uploads\/2025\/01\/Crea-Tu-Primera-Aplicacion-Web-Una-App-de-Notas-Sencilla.png\" alt=\"Ett exempel p\u00e5 en enkel textbaserad webbapplikation som visar anteckningar, inklusive en kalenderpost och en lista med URL:er.\" width=\"960\" height=\"569\" title=\"\"> <\/picture><\/figure>\n<p>Den r\u00e4knar \u00e4ven tecken och ord, vilket \u00e4r en bra introduktion till str\u00e4ngmanipulation (text). Sj\u00e4lvklart \u00e4r appen v\u00e4ldigt enkel \u2013 det \u00e4r po\u00e4ngen! Men med den h\u00e4r handledningen l\u00e4r du dig grunderna i att utveckla en webbapp, och sedan ligger v\u00e4rlden f\u00f6r din sida. \ud83e\uddaa\ud83d\udcbb<\/p>\n<h2 id=\"how-you-rsquo-ll-build-it\">Hur ska du bygga den?<\/h2>\n<p>\u00c4ven om webbapplikationer \u00e4r v\u00e4ldigt olika, anv\u00e4nder de vanligtvis tre huvudsakliga tekniker: HTML, CSS och JavaScript. Det \u00e4r viktigt att du f\u00f6rst\u00e5r deras roller innan du b\u00f6rjar. \ud83d\udcda<\/p>\n<ul>\n<li>HTML: Hypertext Markup Language l\u00e5ter dig definiera strukturen f\u00f6r ditt inneh\u00e5ll. Med det kan du markera text baserat p\u00e5 dess betydelse, till exempel ange om det \u00e4r ett stycke, en rubrik eller ett objekt i en lista.<\/li>\n<li>CSS: Cascading Style Sheets l\u00e5ter dig formatera ditt inneh\u00e5ll. Med hj\u00e4lp av detta spr\u00e5k kan du f\u00e4rga ett stycke gr\u00f6nt, g\u00f6ra alla dina l\u00e4nkar fetstilta eller placera en sidof\u00e4lt bredvid din huvudartikel. \ud83c\udfa8<\/li>\n<li>JavaScript: Med detta programmeringsspr\u00e5k kan du l\u00e4gga till funktionalitet p\u00e5 din webbplats. Du kan f\u00e5 knappar att visa eller d\u00f6lja delar av ditt dokument n\u00e4r du klickar p\u00e5 dem, eller implementera en fullfj\u00e4drad ordbehandlare eller ett videospel. \ud83c\udfae<\/li>\n<\/ul>\n<p>Han <a href=\"https:\/\/web.dev\" target=\"_blank\" rel=\"noopener noreferrer\">webbplats.dev<\/a> (escrito por miembros del equipo de Chrome) y MDN, la Red de Desarrolladores de Mozilla, son dos excelentes fuentes de informaci\u00f3n sobre tecnolog\u00edas web fundamentales.<\/p>\n<figure><picture><source media=\"(min-width: 1024px)\" data-=\"\" \/><source media=\"(min-width: 768px)\" data-=\"\" \/><source media=\"(min-width: 481px)\" data-=\"\" \/><source media=\"(min-width: 0px)\" data-=\"\" \/><img decoding=\"async\" style=\"display: block; height: auto; max-width: 100%;\" src=\"https:\/\/mastertrend.info\/wp-content\/uploads\/2025\/01\/1736598858_798_Crea-Tu-Primera-Aplicacion-Web-Una-App-de-Notas-Sencilla.png\" alt=\"Hemsidan f\u00f6r web.dev-webbplatsen med utbildningsresurser f\u00f6r HTML, CSS och JavaScript.\" width=\"1388\" height=\"734\" title=\"\"> <\/picture><\/figure>\n<h2 id=\"the-app-structure\">Appens struktur<\/h2>\n<p>Appen du kommer att bygga kommer att best\u00e5 av tre enkla filer: index.html, styles.css och script.js. \ud83d\uddc2\ufe0f<\/p>\n<p>Det finns inga speciella krav f\u00f6r att k\u00f6ra appen; du beh\u00f6ver bara en webbl\u00e4sare. Det finns ingen backend-funktionalitet, s\u00e5 du beh\u00f6ver inget skriptspr\u00e5k som PHP eller en lokal webbserver. N\u00e4r du \u00e4r klar kan du \u00f6ppna <a title=\"Hur man konfigurerar en lokal Linux-webbserver p\u00e5 Windows 11\" href=\"https:\/\/mastertrend.info\/sv\/lokal-linux-webbserver\/\" target=\"_blank\" rel=\"noopener\" data-wpil-monitor-id=\"5749\">index.html-filen direkt i din webbl\u00e4sare<\/a> och allt kommer att ordna sig. \ud83d\ude0a<\/p>\n<p>Det \u00e4r viktigt att n\u00e4mna att den h\u00e4r appen sparar din text utan att skriva den till en specifik fil p\u00e5 disken, eftersom JavaScript inte kan komma \u00e5t filsystemet. Den anv\u00e4nder Web Storage API, ett kraftfullt alternativ till cookies. \ud83c\udf6a\ud83d\udcbe<\/p>\n<h2 id=\"how-to-build-the-note-taker\">Hur man bygger anteckningsenheten<\/h2>\n<p>Skapa f\u00f6ljande tre filer i samma katalog och \u00f6ppna sedan index.html i en webbl\u00e4sare. Alternativt kan du ladda ner filerna fr\u00e5n <a href=\"https:\/\/github.com\/bobbykjack\/text\" target=\"_blank\" rel=\"noopener\">detta GitHub-arkiv<\/a>. \ud83d\udce5<\/p>\n<h3 id=\"building-the-structure-with-html\">Bygga strukturen med HTML<\/h3>\n<p>Filen index.html definierar strukturen f\u00f6r din apps inneh\u00e5ll i HTML. Den inneh\u00e5ller referenser till de andra tv\u00e5 filerna s\u00e5 att en webbl\u00e4sare kan kombinera dem till slutprodukten.<\/p>\n<p>Liksom alla HTML-dokument inneh\u00e5ller den \u00f6versta strukturen en huvuddel som inneh\u00e5ller metadata och en br\u00f6dtextdel som inneh\u00e5ller det faktiska inneh\u00e5llet som kommer att visas p\u00e5 sidan:<\/p>\n<pre><code class=\"hljs html\"><span class=\"hljs-meta\">html<\/span>&gt;\r\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">html<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">huvud<\/span>&gt;<\/span>\r\n    ...\r\n<span class=\"hljs-tag\"><span class=\"hljs-name\">huvud<\/span>&gt;<\/span><\/code><\/pre>\n<p><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">kropp<\/span>&gt;<\/span><br \/>\n&#8230;<br \/>\n<span class=\"hljs-tag\"><span class=\"hljs-name\">kropp<\/span>&gt;<\/span><br \/>\n<span class=\"hljs-tag\"><span class=\"hljs-name\">html<\/span>&gt;<\/span><\/p>\n<pre><code class=\"hljs html\"><\/code><\/pre>\n<pre><code class=\"hljs html\"><\/code><\/pre>\n<p>Metadata i huvudet \u00e4r mycket kortfattad, med bara en sidtitel (som visas i webbl\u00e4sarens titelf\u00e4lt) och en referens till styles.css-filen:<\/p>\n<pre><code class=\"hljs html\">    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">titel<\/span>&gt;<\/span>Text<span class=\"hljs-tag\"><span class=\"hljs-name\">titel<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">l\u00e4nk<\/span> <span class=\"hljs-attr\">relation<\/span>=<span class=\"hljs-string\">&quot;stilmall&quot;<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">&quot;styles.css&quot;<\/span> \/&gt;<\/span>\r\n<\/code><\/pre>\n<p>Kroppen \u00e4r mer komplicerad, men det finns bara n\u00e5gra f\u00e5 viktiga delar:<\/p>\n<pre><code class=\"hljs html\">    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">&quot;disk&quot;<\/span>&gt;<\/span>\r\n        ord: <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">sp\u00e4nna<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">&quot;ord&quot;<\/span>&gt;<\/span>0<span class=\"hljs-tag\"><span class=\"hljs-name\">sp\u00e4nna<\/span>&gt;<\/span>\r\n        \/ tecken: <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">sp\u00e4nna<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">&quot;tecken&quot;<\/span>&gt;<\/span>0<span class=\"hljs-tag\"><span class=\"hljs-name\">sp\u00e4nna<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\"><span class=\"hljs-name\">div<\/span>&gt;<\/span><\/code><\/pre>\n<p><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">textomr\u00e5de<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">&quot;text&quot;<\/span> <span class=\"hljs-attr\">autofokus<\/span>=<span class=\"hljs-string\">\u00ab1\u00bb<\/span>&gt;<\/span><span class=\"hljs-tag\"><span class=\"hljs-name\">textomr\u00e5de<\/span>&gt;<\/span><\/p>\n<pre><code class=\"hljs html\"><\/code><\/pre>\n<p><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">manus<\/span> <span class=\"hljs-attr\">k\u00e4lla<\/span>=<span class=\"hljs-string\">\u00abscript.js\u00bb<\/span>&gt;<\/span><span class=\"hljs-tag\"><span class=\"hljs-name\">manus<\/span>&gt;<\/span><\/p>\n<pre><code class=\"hljs html\"><\/code><\/pre>\n<pre><code class=\"hljs html\"><\/code><\/pre>\n<p>Div-elementet inneh\u00e5ller appens ord- och teckenantal. Det kommer att finnas h\u00f6gst upp i webbappen och uppdateras n\u00e4r texten \u00e4ndras.<\/p>\n<p>Notera id-attributen, som \u00e4r avg\u00f6rande f\u00f6r \u00e5tg\u00e4rden. V\u00e4rdet p\u00e5 ett id m\u00e5ste vara unikt s\u00e5 att appen kan anv\u00e4nda det f\u00f6r att identifiera ett specifikt element. Att g\u00f6ra detta kan hj\u00e4lpa oss att utforma dessa element och \u00e4ven rikta in dem n\u00e4r vi l\u00e4gger till funktionalitet.<\/p>\n<p>Textarea \u00e4r ett inbyggt formul\u00e4relement som l\u00e5ter dig skriva enkel text i en webbl\u00e4sare. Med attributet autofocus \u00e4r det klart att skriva s\u00e5 snart sidan laddas. Slutligen refererar sidan till JavaScript-filen script.js.<\/p>\n<p>Nu kan du \u00f6ppna index.html-filen i en webbl\u00e4sare. Den kommer inte att g\u00f6ra n\u00e5gonting just nu, och den kommer inte ens att se bra ut, men det \u00e4r bra att testa din app i varje steg f\u00f6r att se till att grunderna fungerar som f\u00f6rv\u00e4ntat.<\/p>\n<figure><picture><source media=\"(min-width: 1024px)\" data-=\"\" \/><source media=\"(min-width: 768px)\" data-=\"\" \/><source media=\"(min-width: 481px)\" data-=\"\" \/><source media=\"(min-width: 0px)\" data-=\"\" \/><img decoding=\"async\" style=\"display: block; height: auto; max-width: 100%;\" src=\"https:\/\/mastertrend.info\/wp-content\/uploads\/2025\/01\/1736598858_678_Crea-Tu-Primera-Aplicacion-Web-Una-App-de-Notas-Sencilla.png\" alt=\"En vy av webbappen f\u00f6r anteckningar med standardwebbl\u00e4sarstilar, d\u00e4r allt grupperas i det \u00f6vre v\u00e4nstra h\u00f6rnet.\" width=\"960\" height=\"569\" title=\"\"> <\/picture><\/figure>\n<h3 id=\"making-things-look-good-with-css\">F\u00e5 dem att se bra ut med CSS<\/h3>\n<p>Med CSS kan du utforma delar av din webbsida genom att rikta in dig p\u00e5 just dessa delar och ange v\u00e4rden f\u00f6r egenskaper som teckenstorlek och bakgrundsf\u00e4rg. Den h\u00e4r exempelappen beh\u00f6ver inte en s\u00e4rskilt f\u00f6rfinad design eftersom dess gr\u00e4nssnitt \u00e4r s\u00e5 grundl\u00e4ggande. Vi kan dock sl\u00e4ta ut de oj\u00e4mna kanterna med en touch av stil. \ud83c\udfa8\u2728<\/p>\n<p>F\u00f6rst, utforma kroppen f\u00f6r att definiera den \u00f6vergripande designen:<\/p>\n<pre><code class=\"hljs css\"><span class=\"hljs-selector-tag\">kropp<\/span> {\r\n    <span class=\"hljs-selector-tag\">marginal<\/span>: 0;\r\n    <span class=\"hljs-selector-tag\">stoppning<\/span>: 0;\r\n    <span class=\"hljs-selector-tag\">visa<\/span>: <span class=\"hljs-selector-tag\">rutn\u00e4t<\/span>;\r\n    <span class=\"hljs-selector-tag\">min-h\u00f6jd<\/span>: 100<span class=\"hljs-selector-tag\">vh<\/span>;\r\n    <span class=\"hljs-selector-tag\">rutn\u00e4tsmallrader<\/span>: <span class=\"hljs-selector-tag\">min-inneh\u00e5ll<\/span> 1<span class=\"hljs-selector-tag\">fr<\/span>;\r\n}\r\n<\/code><\/pre>\n<p>Este CSS utiliza la disposici\u00f3n en cuadr\u00edcula para posicionar los conteos de palabras y caracteres en una fila estrecha sobre el textarea. La propiedad grid-template-rows especifica que la fila del conteo debe ser lo m\u00e1s corta posible (min-content) y el textarea debe llenar el espacio restante (1fr).<\/p>\n<p>R\u00e4kneraden har en grundl\u00e4ggande stil f\u00f6r att skilja den fr\u00e5n resten av texten, fr\u00e4mst genom sin bakgrund:<\/p>\n<pre><code class=\"hljs css\"><span class=\"hljs-selector-id\">#-r\u00e4knare<\/span> {\r\n    <span class=\"hljs-selector-tag\">typsnittsfamilj<\/span>: <span class=\"hljs-selector-tag\">sans-serif<\/span>;\r\n    <span class=\"hljs-selector-tag\">bakgrundsf\u00e4rg<\/span>: <span class=\"hljs-selector-id\">#f7f7f7<\/span>;\r\n    <span class=\"hljs-selector-tag\">textjustering<\/span>: <span class=\"hljs-selector-tag\">centrum<\/span>;\r\n    <span class=\"hljs-selector-tag\">bredd<\/span>: 100%;\r\n    <span class=\"hljs-selector-tag\">stoppning<\/span>: 0<span class=\"hljs-selector-class\">0,5 em<\/span> 0;\r\n}\r\n<\/code><\/pre>\n<p>Slutligen \u00e4r textomr\u00e5det utformat f\u00f6r att visa l\u00e4sbar text med gott om utrymme att andas. Linjen som skiljer r\u00e4kningarna fr\u00e5n texten \u00e4r faktiskt den \u00f6vre kanten av detta textomr\u00e5de.<\/p>\n<pre><code class=\"hljs css\"><span class=\"hljs-selector-tag\">textomr\u00e5de<\/span> {\r\n    <span class=\"hljs-selector-tag\">bredd<\/span>: 100%;\r\n    <span class=\"hljs-selector-tag\">h\u00f6jd<\/span>: 100%;\r\n    <span class=\"hljs-selector-tag\">teckenstorlek<\/span>: 16<span class=\"hljs-selector-tag\">delstat<\/span>;\r\n    <span class=\"hljs-selector-tag\">stoppning<\/span>: 1<span class=\"hljs-selector-tag\">i<\/span>;\r\n    <span class=\"hljs-selector-tag\">l\u00e5dstorlek<\/span>: <span class=\"hljs-selector-tag\">kantruta<\/span>;\r\n    <span class=\"hljs-selector-tag\">skissera<\/span>: 0;\r\n    <span class=\"hljs-selector-tag\">gr\u00e4ns<\/span>: <span class=\"hljs-selector-tag\">ingen<\/span>;\r\n    <span class=\"hljs-selector-tag\">kant-topp<\/span>: 1<span class=\"hljs-selector-tag\">px<\/span> <span class=\"hljs-selector-tag\">fast<\/span> <span class=\"hljs-selector-id\">#999<\/span>;\r\n}<\/code><\/pre>\n<figure><picture><source media=\"(min-width: 1024px)\" data-=\"\" \/><source media=\"(min-width: 768px)\" data-=\"\" \/><source media=\"(min-width: 481px)\" data-=\"\" \/><source media=\"(min-width: 0px)\" data-=\"\" \/><img decoding=\"async\" style=\"display: block; height: auto; max-width: 100%;\" src=\"https:\/\/mastertrend.info\/wp-content\/uploads\/2025\/01\/1736598859_152_Crea-Tu-Primera-Aplicacion-Web-Una-App-de-Notas-Sencilla.png\" alt=\"Anteckningsappen med anpassade stilar visar r\u00e4kningsf\u00e4ltet h\u00f6gst upp med ett textomr\u00e5de i full storlek nedanf\u00f6r.\" width=\"960\" height=\"569\" title=\"\"> <\/picture><\/figure>\n<h3 id=\"adding-functionality-with-javascript\">L\u00e4gga till funktionalitet med JavaScript<\/h3>\n<p>Med strukturen och stilen p\u00e5 plats \u00e4r du redo att l\u00e4gga till funktionalitet: koden som g\u00f6r att den h\u00e4r enkla appen faktiskt g\u00f6r n\u00e5got. \ud83d\udee0\ufe0f<\/p>\n<p>Innan du b\u00f6rjar skriva \u00e4ven den enklaste koden \u00e4r det en bra id\u00e9 att f\u00f6rst\u00e5 vad du vill att den ska g\u00f6ra. I det h\u00e4r fallet finns det bara ett par allm\u00e4nna krav:<\/p>\n<ul>\n<li>Spara den inmatade texten och ladda om den vid behov.<\/li>\n<li>Uppdatera tecken- och ordantal f\u00f6r att f\u00e5 statistik i realtid. \ud83d\udcca<\/li>\n<\/ul>\n<p>B\u00e5da kraven inneb\u00e4r att element i dokumentet uppdateras. S\u00e5 skriptet b\u00f6rjar med att h\u00e4mta referenser till dessa noder med hj\u00e4lp av metoden getElementById:<\/p>\n<pre><code class=\"hljs js\"><span class=\"hljs-keyword\">konstant<\/span> ord = <span class=\"hljs-built_in\">dokumentera<\/span>.getElementById(<span class=\"hljs-string\">&quot;ord&quot;<\/span>);\r\n<span class=\"hljs-keyword\">konstant<\/span> tecken = <span class=\"hljs-built_in\">dokumentera<\/span>.getElementById(<span class=\"hljs-string\">&quot;tecken&quot;<\/span>);\r\n<span class=\"hljs-keyword\">konstant<\/span> textarea = <span class=\"hljs-built_in\">dokumentera<\/span>.getElementById(<span class=\"hljs-string\">&quot;text&quot;<\/span>);\r\n<\/code><\/pre>\n<p>Observera att ord, tecken och text \u00e4r ID:n f\u00f6r respektive element i dokumentet, tilldelade i HTML-filen med id-attributet.<\/p>\n<p>N\u00e4sta steg \u00e4r att appen ska reagera n\u00e4r texten \u00e4ndras:<\/p>\n<pre><code class=\"hljs js\">textarea.addEventListener(<span class=\"hljs-string\">&quot;input&quot;<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">fungera<\/span>(<span class=\"hljs-params\">ev<\/span>) <\/span>{ lokallagring.setItem(<span class=\"hljs-string\">&quot;text&quot;<\/span>, ev.m\u00e5l.v\u00e4rde); uppdatera_antal(ev.m\u00e5l.v\u00e4rde); });\r\n<\/code><\/pre>\n<p>En h\u00e4ndelselyssnare \u00e4r en funktion som JavaScript automatiskt k\u00f6r n\u00e4r en viss h\u00e4ndelse intr\u00e4ffar. I det h\u00e4r fallet kopplar vi en lyssnare till textarea-noden, som k\u00f6rs n\u00e4r &quot;input&quot;-h\u00e4ndelsen intr\u00e4ffar. Det vill s\u00e4ga n\u00e4r n\u00e5gon interagerar med textarea.<\/p>\n<p>D\u00e4refter anv\u00e4nder vi Web Storage API f\u00f6r att spara det aktuella inneh\u00e5llet i textomr\u00e5det, vilket kommer fr\u00e5n ev.target.value. I den h\u00e4r strukturen \u00e4r ev ett objekt som representerar h\u00e4ndelsen som utl\u00f6ste lyssnaren, ev.target \u00e4r noden som tog emot h\u00e4ndelsen och ev.target.value \u00e4r texten i det textomr\u00e5det.<\/p>\n<p>Metoden setItem tar tv\u00e5 parametrar: ett nyckelnamn som ska associeras med data och de faktiska data som ska lagras.<\/p>\n<p>N\u00e4sta steg \u00e4r att anropa update_counts() och skicka samma text. Vi ska f\u00f6rklara den funktionen strax.<\/p>\n<p>Nu n\u00e4r vi sparar texten vill du ladda den igen n\u00e4r appen \u00f6ppnas eller laddas om. Vi kan ta hand om det med hj\u00e4lp av en annan lyssnare:<\/p>\n<pre><code class=\"hljs js\"><span class=\"hljs-built_in\">f\u00f6nster<\/span>.addEventListener(<span class=\"hljs-string\">&quot;ladda&quot;<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">fungera<\/span>(<span class=\"hljs-params\">ev<\/span>) <\/span>{\r\n    <span class=\"hljs-keyword\">var<\/span> text = localStorage.getItem(<span class=\"hljs-string\">&quot;text&quot;<\/span>); textarea.v\u00e4rde = text; uppdatera_antal(text); });\r\n<\/code><\/pre>\n<p>Denna lyssnare hanterar load-h\u00e4ndelsen som intr\u00e4ffar p\u00e5 window-objektet, en representation p\u00e5 toppniv\u00e5 av webbl\u00e4sarf\u00f6nstret. N\u00e4r f\u00f6nstret laddas returnerar ett anrop till getItem() det lagrade textv\u00e4rdet fr\u00e5n lokal lagring. Denna kod st\u00e4ller sedan in v\u00e4rdet f\u00f6r textarea till den laddade texten och anropar, liksom den f\u00f6reg\u00e5ende lyssnaren, update_counts() med denna text.<\/p>\n<p>Det \u00e5terst\u00e5ende arbetet g\u00f6rs i funktionen update_counts() som ser ut s\u00e5 h\u00e4r:<\/p>\n<pre><code class=\"hljs js\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">fungera<\/span>\u00a0<span class=\"hljs-title\">uppdateringsantal<\/span>(<span class=\"hljs-params\">text<\/span>) <\/span>{ tecken.innerHTML = text.l\u00e4ngd; ord.innerHTML = text.split()<span class=\"hljs-string\">' '<\/span>).l\u00e4ngd; }\r\n<\/code><\/pre>\n<p>Till skillnad fr\u00e5n ett textarea-tecken har vanlig text inte en value-egenskap, s\u00e5 vi st\u00e4ller in innerHTML-egenskapen ist\u00e4llet. Length-egenskapen f\u00f6r en str\u00e4ng \u00e4r en enkel skrivskyddad egenskap som ger oss antalet tecken.<\/p>\n<p>text.split(&#039; &#039;) delar str\u00e4ngen vid mellanslagstecknen och returnerar resultatet som en array av str\u00e4ngar. Liksom str\u00e4ngar har arrayer en length-egenskap som anger antalet element i en array.<\/p>\n<p>Om du testar den h\u00e4r koden kan du dock uppt\u00e4cka ett par fel:<\/p>\n<ol>\n<li>Den kommer inte att r\u00e4kna ett ord korrekt p\u00e5 en rad, eftersom det inte finns n\u00e5gra mellanslag runt det.<\/li>\n<li>Utan n\u00e5gon text alls kommer den att rapportera ett enda ord p\u00e5 grund av hur delning fungerar.<\/li>\n<\/ol>\n<p>F\u00f6r att l\u00f6sa det f\u00f6rsta problemet kan du dela p\u00e5 ett regulj\u00e4rt uttryck (\\s betyder &quot;ett tomt tecken&quot;) ist\u00e4llet f\u00f6r ett mellanslag. F\u00f6r att l\u00f6sa det andra problemet, filtrera bort tomma str\u00e4ngar fr\u00e5n resultatet:<\/p>\n<pre><code class=\"hljs js\">    ord.innerHTML = text.split(<span class=\"hljs-regexp\">\/\\s\/<\/span>).filtrera(<span class=\"hljs-function\"><span class=\"hljs-keyword\">fungera<\/span>(<span class=\"hljs-params\">n<\/span>) <\/span>{ <span class=\"hljs-keyword\">\u00e5terv\u00e4nda<\/span> n != <span class=\"hljs-string\">''<\/span>; }).l\u00e4ngd;\r\n<\/code><\/pre>\n<p>Om du inte helt f\u00f6rst\u00e5r den raden, kolla in MDN-sidorna f\u00f6r <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/String\/split\" target=\"_blank\" rel=\"noopener noreferrer\">split<\/a> och <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Array\/filter\" target=\"_blank\" rel=\"noopener noreferrer\">filtrera<\/a>.<\/p>\n<figure><picture><source media=\"(min-width: 1024px)\" data-=\"\" \/><source media=\"(min-width: 768px)\" data-=\"\" \/><source media=\"(min-width: 481px)\" data-=\"\" \/><source media=\"(min-width: 0px)\" data-=\"\" \/><img decoding=\"async\" style=\"display: block; height: auto; max-width: 100%;\" src=\"https:\/\/mastertrend.info\/wp-content\/uploads\/2025\/01\/1736598859_129_Crea-Tu-Primera-Aplicacion-Web-Una-App-de-Notas-Sencilla.png\" alt=\"Webbapplikationen med exempeltext som visar korrekt tecken- och ordantal.\" width=\"960\" height=\"569\" title=\"\"> <\/picture><\/figure>\n<hr \/>\n<p>Du kan bygga m\u00e5nga anv\u00e4ndbara webbapplikationer med bara n\u00e5gra f\u00e5 filer. Du kan ocks\u00e5 ut\u00f6ka den h\u00e4r enkla anteckningsappen f\u00f6r att l\u00e4gga till mer funktionalitet. Du kan till exempel anv\u00e4nda <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Window\/location\" target=\"_blank\" rel=\"noopener\" data-schema-attribute=\"mentions\">window.location-egenskapen<\/a> f\u00f6r att h\u00e4mta den aktuella URL:en och st\u00f6dja flera anteckningar genom att variera namnet du skickar till localStorage.setItem. \ud83d\uddd2\ufe0f\ud83c\udf0d<\/p>","protected":false},"excerpt":{"rendered":"<p>Skapa din f\u00f6rsta webbapp och spara anteckningar med en ordr\u00e4knare. L\u00e4r dig enkelt, snabbt och gratis! \ud83c\udf10\ud83d\udd8b\ufe0f\u2728<\/p>","protected":false},"author":1,"featured_media":49198,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ai_generated_summary":"","iawp_total_views":39,"jnews-multi-image_gallery":[],"jnews_single_post":[],"jnews_primary_category":[],"jnews_social_meta":[],"jnews_review":[],"enable_review":"","type":"","name":"","summary":"","brand":"","sku":"","good":[],"bad":[],"score_override":"","override_value":"","rating":[],"price":[],"jnews_override_counter":[],"footnotes":""},"categories":[1435],"tags":[1445,1558],"class_list":["post-32655","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriales","tag-evergreencontent","tag-techtips"],"_links":{"self":[{"href":"https:\/\/mastertrend.info\/sv\/wp-json\/wp\/v2\/posts\/32655","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mastertrend.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mastertrend.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mastertrend.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mastertrend.info\/sv\/wp-json\/wp\/v2\/comments?post=32655"}],"version-history":[{"count":0,"href":"https:\/\/mastertrend.info\/sv\/wp-json\/wp\/v2\/posts\/32655\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mastertrend.info\/sv\/wp-json\/wp\/v2\/media\/49198"}],"wp:attachment":[{"href":"https:\/\/mastertrend.info\/sv\/wp-json\/wp\/v2\/media?parent=32655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mastertrend.info\/sv\/wp-json\/wp\/v2\/categories?post=32655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mastertrend.info\/sv\/wp-json\/wp\/v2\/tags?post=32655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}