jQuery gjorde JavaScript enklare med enkel DOM‑manipulation, händelser och AJAX. Lär dig vad det är, varför det minskade i användning och när det fortfarande är vettigt idag.

jQuery är ett litet JavaScript‑bibliotek som gör vanliga uppgifter på en webbsida enklare—saker som att välja element, reagera på klick, ändra text, visa/dölja delar av sidan och skicka förfrågningar till en server.
Om du någonsin sett kod som $("button").click(...) är det jQuery. $ är bara en genväg för “hitta något på sidan och gör något med det.”
Guiden är praktisk och icke‑teknisk: vad jQuery är, varför det blev populärt, varför nyare projekt inte använder det lika ofta och hur du kan hantera det om din sajt fortfarande använder det. Den är medvetet längre så vi kan visa tydliga exempel och verkliga råd istället för snabba åsikter.
När folk säger att jQuery är “glömt” menar de oftast inte att det försvunnit. De menar:
Så historien är inte “jQuery är dött.” Snarare: jQuery gick från att vara standardverktyget för front‑end till att bli ett legacy‑beroende du kan ärva—och ibland fortfarande väljer med flit.
Innan jQuery innebar front‑end‑arbete ofta att skriva samma små, irriterande kodbitar om och om igen—och testa dem i flera webbläsare för att upptäcka att de betedde sig olika. Även enkla mål som “hitta detta element”, “bind en klickhanterare” eller “skicka en förfrågan” kunde bli en röra av specialfall.
Många tidiga JavaScript‑projekt handlade mindre om att bygga funktioner och mer om att kämpa med miljön. Du skrev kod som fungerade i en webbläsare, lade till extra grenar för att få den att fungera i en annan. Team höll ofta egna ”mini‑bibliotek” av hjälpfunktioner bara för att klara vardagen.
Resultatet: långsammare utveckling, fler buggar och en ständig rädsla för att en liten ändring skulle bryta en äldre webbläsare som användarna fortfarande förlitade sig på.
Webbläsare var inte överens om viktiga detaljer. DOM‑urval, eventhantering och till och med hur man hämtar elementstorlekar kunde skilja sig åt. Internet Explorer hade särskilt olika API:er för händelser och XMLHTTP‑förfrågningar, så “standard” kod var inte alltid portabel.
Det spelade roll eftersom webbplatser inte byggdes för en enda webbläsare. Om din kassavalidering, navigationsmeny eller modal dialog misslyckades i en populär webbläsare var det ett verkligt affärsproblem.
jQuery blev stort eftersom det erbjöd ett konsekvent, vänligt API som jämnade ut dessa skillnader.
Det gjorde vanliga uppgifter dramatiskt enklare:
Lika viktigt var jQuerys ”skriv mindre, gör mer”‑stil som hjälpte team att leverera snabbare med färre webbläsarspecifika överraskningar—särskilt i en era när moderna DOM‑API:er inte var lika kapabla eller allmänt stödda som idag.
jQuerys verkliga superkraft var inte att introducera helt nya idéer—utan att göra vanliga webbläsaruppgifter konsekventa och enkla över olika webbläsare. Om du läser äldre front‑end‑kod ser du oftast jQuery användas för fyra vardagssysslor.
$‑funktionen)Funktionen $() lät dig “plocka” element med CSS‑lika selektorer och sedan arbeta med dem som en grupp.
Istället för att jonglera webbläsarquirks och ordrika API:er kunde du välja alla element, hitta ett barn eller gå upp till en förälder med korta, kedjbara anrop.
jQuery gjorde det enkelt att reagera på användaråtgärder:
click för knappar och länkarsubmit för formulärready för att köra kod när sidan laddatsDet jämnade också ut skillnader i hur webbläsare hanterade händelseobjekt och bindning, vilket spelade stor roll när webbläsarstöd var ojämnt.
Innan fetch() blev standard var jQuerys $.ajax(), $.get() och $.post() ett rakt sätt att begära data från en server och uppdatera sidan utan omladdning.
Det möjliggjorde mönster som idag känns normala—live‑sök, “ladda mer”-knappar, partiella siduppdateringar—med ett enda, bekant API.
jQuery populariserade snabba UI‑touches som hide(), show(), fadeIn(), slideToggle() och animate(). De var praktiska för menyer, notiser och grundläggande övergångar—särskilt när CSS‑stöd var mindre tillförlitligt.
Tillsammans förklarar dessa bekvämligheter varför legacy‑JavaScript‑kod ofta börjar med $( och varför jQuery förblev ett standardverktyg så länge.
Mycket av jQuerys rykte kommer från hur lite kod det tog för vanliga UI‑uppgifter—särskilt när webbläsarskillnader var besvärliga. En snabb sida‑vid‑sida visar det tydligt.
jQuery
// Select a button and run code when it's clicked
$('#save').on('click', function (e) {
e.preventDefault();
$('.status').text('Saved!');
});
Modern (vanilla) JavaScript
// Select a button and run code when it's clicked
const saveButton = document.querySelector('#save');
const status = document.querySelector('.status');
saveButton?.addEventListener('click', (e) => {
e.preventDefault();
if (status) status.textContent = 'Saved!';
});
Vid första anblick känns jQuery‑versionen ”renare”: ett kedjat anrop väljer elementet, fäster en hanterare och uppdaterar texten. Den kompaktheten var en stor säljpunkt.
Modern JavaScript är något mer ordriktigt, men också mer explicit:
querySelector och addEventListener berättar exakt vad som händer.textContent är en standard DOM‑egenskap (ingen biblioteksvinjettering).?.) och null‑kontroller gör det tydligt vad som sker om element saknas.Det beror på sammanhang. Om du underhåller en äldre kodbas som redan använder jQuery överallt kan jQuery‑snutten vara mer konsekvent och snabbare att arbeta med. Om du skriver ny kod är moderna DOM‑API:er allmänt stödda, minskar beroenden och är lättare att integrera med dagens verktyg och ramverk.
Länge var jQuerys största fördel förutsägbarhet. Du kunde skriva ett sätt att välja element, fästa händelser eller göra en Ajax‑förfrågan—och det fungerade i de flesta fall.
Under åren standardiserades och förbättrades webbläsare. Många av de ”måste‑ha”‑bekvämligheter jQuery packade ihop finns nu inbyggda i JavaScript, så du behöver ofta inte ett extra bibliotek för grundläggande uppgifter.
Moderna DOM‑metoder täcker de vanligaste jQuery‑mönstren:
document.querySelector() / document.querySelectorAll() ersätter $(...) för många urval.element.classList.add() / .remove() / .toggle() täcker klassmanipulation.element.addEventListener() ersätter jQuerys event‑wrapper för de flesta användningsfall.Istället för att komma ihåg jQuery‑specifika hjälpmetoder kan du lita på standard‑API:er som fungerar i moderna webbläsare.
Där $.ajax() brukade vara standard hanterar fetch() nu många vardagsförfrågningar med mindre ceremoni, särskilt tillsammans med JSON:
const res = await fetch('/api/items');
const data = await res.json();
Du måste fortfarande hantera fel och timeouter explicit, men kärnideen—att göra förfrågningar utan plugin—är nu inbyggd.
jQuery introducerade många till asynkrona flöden via callbacks och $.Deferred. Idag gör Promises och async/await asynkrona flöden lättare att läsa, och ES‑moduler gör det tydligare hur kod är organiserad.
Den kombinationen—moderna DOM‑API:er + fetch + moderna språkfunktioner—tog bort mycket av anledningen till att team valde jQuery som standard.
jQuery växte upp under en era med ”fler‑sidors webb”: servern renderade HTML, browsern laddade en sida och du strödde beteende över befintlig markup—klickhanterare, animationer, AJAX‑anrop.
Moderna front‑end‑ramverk vände på det. Istället för att förbättra sidor genererar appar ofta det mesta av UI:t i browsern och håller det synkront med data.
React, Vue och Angular populariserade idén att bygga gränssnitt av komponenter—små, återanvändbara delar som äger sin markup, sitt beteende och sitt state.
I detta upplägg vill ramverket vara sanningskällan för vad som finns på skärmen. Det spårar state, renderar om delar av UI:t vid förändring och förväntar sig deklarativt uttryck (“när X är sant, visa Y”).
jQuery uppmuntrar däremot imperativ DOM‑manipulation (“hitta detta element, ändra texten, dölj det”). Det kan krocka med ett ramverks rendercykel. Om du manuellt ändrar DOM‑noder som en komponent styr kan nästa re‑render skriva över dina ändringar—eller så får du svårfelsökta inkonsekvenser.
När SPAs blev vanliga antog team byggverktyg och bundlers (Webpack, Rollup, Vite). Istället för att lägga in ett par script‑taggar importerar du moduler, bundlar bara det du använder och optimerar för prestanda.
Denna förändring gjorde också folk mer känsliga för beroenden och bundle‑storlek. Att dra in jQuery “bara för säkerhets skull” kändes mindre naturligt när varje kilobyte och uppdatering i tredjepartskod blev en del av pipelinen.
Du kan använda jQuery inuti ett ramverk, men det blir ofta en specialfallsö isolerad—svårare att testa, svårare att förstå och mer benäget att gå sönder vid refaktoreringar. Därför valde många team ramverks‑inbyggda mönster framför jQuery‑stil DOM‑skript.
jQuery i sig är inte “gigantiskt”, men det kommer ofta med bagage. Många projekt som förlitar sig på jQuery samlar också på sig plugins (sliders, date pickers, modalbibliotek, valideringshjälpare), som var och en lägger till mer tredjepartskod att ladda och parsa. Med tiden kan en sida börja skicka flera överlappande verktyg—särskilt när funktioner lagts till snabbt och aldrig granskats om.
Mer JavaScript betyder generellt mer för browsern att hämta, parsa och köra innan sidan känns responsiv. Effekten märks särskilt på mobila enheter, långsamma nätverk och äldre hårdvara. Även om användarna till slut får en smidig upplevelse kan “time to usable” försämras när sidan väntar på extra skript och deras beroenden.
Ett vanligt mönster i långlivade sajter är en “hybrid” kodbas: vissa funktioner skrivna med jQuery, nyare delar byggda med ett ramverk (React, Vue, Angular) och ett par vanilla‑snuttar här och där. Den blandningen kan bli förvirrande:
När flera stilar samexisterar blir små ändringar riskablare. En utvecklare uppdaterar en komponent, men ett gammalt jQuery‑skript griper fortfarande in i samma markup och ändrar den—vilket orsakar buggar som är svåra att reproducera.
Team rör sig gradvis bort från jQuery inte för att det “slutar fungera”, utan för att moderna projekt optimerar för mindre bundles och tydligare ägarskap av UI‑beteende. När sajter växer gör minskade tredjepartskod och standardisering på en metod det lättare att optimera prestanda, debugga och onboarda nya utvecklare.
jQuery blev inte bara populärt—det blev default. I åratal var det enklaste sättet att få interaktiva sidor att fungera pålitligt över webbläsare, så det hamnade i otaliga mallar, snippets, tutorials och copy‑paste‑lösningar.
När det väl hänt blev jQuery svårt att undvika: även om en sajt bara använde en liten funktion laddade man ofta hela biblioteket eftersom allt annat förväntade sig att det fanns där.
En stor anledning till att jQuery fortfarande syns är enkel: dess framgång gjorde det “överallt” i tredjepartskod. Äldre UI‑widgets, sliders, lightboxes, formulärvalidatorer och tema‑skript skrevs ofta som jQuery‑plugins. Om en sajt är beroende av någon sådan komponent kan borttagning av jQuery innebära att du måste omskriva eller ersätta det beroendet—inte bara ändra några rader.
WordPress är en stor källa till “legacy jQuery.” Många teman och plugins—särskilt de som skapats för flera år sedan—använder jQuery för front‑end‑beteenden och historiskt har även WordPress admin‑skärmar förlitat sig på det. Även när nyare versioner rör sig mot modern JavaScript håller den långa svansen av befintliga tillägg jQuery närvarande på många installationer.
Äldre sajter prioriterar ofta ”rör inte det som fungerar”. Att behålla jQuery kan vara det säkraste när:
Kort sagt, jQuery är inte alltid “glömt”—det är ofta en del av grunden sajten byggdes på, och grunder byter man inte ut lättvindigt.
jQuery är inte “dålig” mjukvara—det är bara mindre nödvändigt än förr. Det finns fortfarande reella situationer där att behålla (eller lägga till) lite jQuery är mest praktiskt, särskilt när du optimerar för tid, kompatibilitet eller stabilitet snarare än arkitektonisk renhet.
Om dina krav inkluderar äldre webbläsare (särskilt äldre versioner av Internet Explorer) kan jQuery fortfarande förenkla DOM‑urval, eventhantering och AJAX på sätt som native API:er inte matchar utan extra polyfills.
Nyckelfrågan är kostnad: att stödja legacy‑webbläsare innebär ofta att du ändå skickar extra kod. I det sammanhanget kan jQuery vara en acceptabel del av kompatibilitetspaketet.
Om en sajt redan är byggd runt jQuery är små UI‑ändringar ofta snabbare och säkrare när de görs i samma stil som resten av koden. Att blanda tillvägagångssätt kan skapa förvirring (två mönster för event, två sätt att manipulera DOM), vilket gör underhållet svårare.
En rimlig regel: om du bara rör en eller två skärmar och appen i övrigt är stabil, är det okej att laga med jQuery—bara undvik att sprida jQuery‑användning till nya system som du senare måste nysta upp.
För en enkel marknadssajt eller internt verktyg—ingen bundler, ingen transpiler, inget komponentramverk—kan jQuery fortfarande vara ett bekvämt ”ett script‑tagg”‑hjälpmedel. Det är särskilt användbart när du vill ha ett par interaktioner (toggle‑menyer, enkla formulärbeteenden) utan att införa en byggpipeline.
Många mogna plugins (date pickers, tabeller, lightboxes) byggdes på jQuery. Om en äldre plugin är affärskritisk och stabil kan det lägsta risktaget vara att behålla jQuery som beroende.
Innan du bestämmer dig, kontrollera om det finns ett underhållet, icke‑jQuery alternativ—eller om uppgradering av plugin tvingar en större omskrivning än projektet har råd med just nu.
Att gå bort från jQuery handlar mindre om en stor rewrite och mer om att minska beroendet utan att bryta beteenden användarna litar på. Det säkraste är inkrementellt: behåll sidor fungerande medan du byter ut delar under ytan.
Börja med tre praktiska frågor:
Denna audit hjälper dig undvika att ersätta saker du inte behöver och avslöjar dolda beroenden som en plugin som tyst använder $.ajax().
De flesta team får snabba vinster genom att byta de enklaste, vanligaste mönstren:
$(".card") → document.querySelectorAll(".card").addClass() / .removeClass() → classList.add() / classList.remove().on("click", ...) → addEventListener("click", ...)Gör detta i små PR:er så det är lätt att granska och rulla tillbaka.
Om du använder $.ajax() migrera dessa anrop till fetch() (eller en liten HTTP‑hjälpare) en endpoint i taget. Behåll respektive svarsschema så resten av UI:t inte behöver ändras omedelbart.
// jQuery
$.ajax({ url: "/api/items", method: "GET" }).done(renderItems);
// Modern JS
fetch("/api/items")
.then(r => r.json())
.then(renderItems);
Innan du tar bort jQuery, lägg på täckning där det verkligen behövs: nyckelflöden, formulärinlämningar och dynamiskt UI. Även lätta kontroller (Cypress smoke tests eller en QA‑checklista) kan hitta regressioner tidigt. Leverera förändringar bakom en feature flag när det är möjligt och kontrollera att analytics/eller felnivåer förblir stabila.
Om du vill ha extra säkerhet under refaktorer hjälper verktyg som stödjer snapshots och rollback. Vissa team som moderniserar legacy‑frontends prototypar ersättningar i Koder.ai och använder dess snapshot/rollback‑arbetsflöde för att iterera utan att förlora en känd fungerande version.
Om du behöver hjälp att organisera hela planen kan du jämföra alternativet i bloggposten 'jquery-vs-vanilla-js' som baseline vid refaktoreringar.
Att migrera bort från jQuery handlar oftast mindre om ”ersätta syntax” och mer om att nysta upp år av antaganden. Här är fällorna som bromsar team—och hur du undviker dem.
En fullständig rewrite låter ren, men skapar ofta en långlivad branch, många regressionsbuggar och press att leverera ofärdigt arbete. Ett säkrare tillvägagångssätt är inkrementellt: ersätt en funktion eller sida i taget, behåll beteendet identiskt och lägg till tester kring de bitar du rör.
Om du introducerar React/Vue/Svelte (eller även ett lättviktskomponentsystem) medan jQuery fortfarande direkt manipulerar samma DOM‑noder kan du få ett ”UI‑dragkamp”: ramverket renderar om och skriver över jQuery‑ändringar, medan jQuery uppdaterar element som ramverket tror det äger.
Tumregel: välj en tydlig gräns. Antingen:
Mycket äldre kod litar på delegaredevents som:
$(document).on('click', '.btn', handler)
Nativ DOM kan göra detta, men matchningen och förväntningarna på this/event.target kan ändras. Vanliga buggar är att handlers triggar för fel element (på grund av inbäddade ikoner/spans) eller inte triggar för dynamiskt tillagda element för att listenern fästs på fel förfader. När du ersätter delegatadevents, bekräfta:
closest() behövs ofta)jQuery UI‑effekter och anpassade animationer dolde ibland åtkomstproblem av misstag—eller introducerade dem. När du ersätter fades, slides och toggles, kontrollera:
aria-expanded på disclosure‑knappar)prefers-reduced-motion)Att fånga dessa fall tidigt gör din migration snabbare och UI:t mer robust—innan sista $() försvunnit.
jQuery är inte “dåligt.” Det löste verkliga problem—särskilt när webbläsare betedde sig olika och interaktiva sidor krävde mycket upprepad DOM‑kod. Vad som förändrats är att du oftast inte behöver det längre för nya projekt.
Flera krafter flyttade det från ”standardval” till ”legacy‑beroende”:
Om du underhåller en äldre sajt kan jQuery fortfarande vara ett rimligt verktyg—särskilt för små fixar, stabila plugins eller sidor som inte motiverar en fullständig omskrivning. Om du bygger nya funktioner, sikta på native JavaScript först och behåll jQuery bara där det tydligt sparar tid.
För fortsatt lärande som är tillämpbart i arbete rekommenderas:
Om du vill modernisera snabbare, överväg verktyg som hjälper dig prototypa och leverera inkrementellt. Koder.ai kan vara användbart här: du kan beskriva beteendet du vill ha i chatten, generera en React‑baserad UI och en Go/PostgreSQL‑backend vid behov, och exportera källkod när du är redo att integrera med en befintlig kodbas.
Om du utvärderar verktyg eller supportalternativ, granska alternativen i prissättningssektionen "pricing".
jQuery är ett JavaScript-bibliotek som förenklar vanliga webbläsaruppgifter som att välja element, hantera händelser, göra Ajax‑förfrågningar och grundläggande effekter (visa/dölj, fade, slide). Dess signaturmönster är att använda funktionen $() för att hitta element och sedan kedja metoder på objekten.
$ är helt enkelt en genvägsfunktion (vanligtvis från jQuery) som hittar element på sidan—liknande document.querySelectorAll()—och returnerar ett jQuery‑objekt du kan kedja metoder på.
Om du ser $() i äldre kod betyder det ofta “välj något, och gör sedan något med det.”
Det blev populärt eftersom det gjorde inkonsekvent webbläsarbeteende förutsägbart. I de tidiga dagarna krävde enkla saker som händelser, DOM‑traversering och Ajax ofta webbläsarspecifika lösningar.
jQuery gav ett och samma API så team kunde leverera snabbare med färre överraskningar mellan webbläsare.
Främst för att moderna webbläsare och JavaScript kom ikapp. Idag kan du ofta ersätta klassiska jQuery‑uppgifter med inbyggda funktioner:
querySelector / querySelectorAll för valclassList för klassändringarNej. Många befintliga sajter använder det fortfarande, och det fungerar fortsatt. “Legacy” betyder ofta att det är vanligare i äldre kodbaser än i nya.
Den praktiska frågan är om det är värt att behålla med tanke på prestanda, underhåll och dina beroenden (särskilt plugins).
För att det blev inbyggt i äldre ekosystem—särskilt i teman och plugins. Ett vanligt exempel är WordPress, där många tillägg historiskt förutsatte att jQuery fanns.
Om din sajt är beroende av en jQuery‑only plugin (sliders, date pickers, lightboxes, validators) innebär borttagning ofta att plugin måste bytas ut, inte bara ett par rader kod.
Ja, i flera praktiska situationer:
I dessa fall kan stabilitet och snabbhet vara viktigare än att minska beroenden.
Börja inkrementellt och mät effekten:
Eventdelegation är en vanlig fallgrop. jQuery‑kod som $(document).on('click', '.btn', handler) förlitar sig ofta på jQuerys matchningsbeteende och this.
I native‑kod behöver du vanligtvis:
event.target.closest('.btn') för att identifiera elementetJa—effekter och DOM‑ändringar kan oavsiktligt bryta åtkomlighet. När du ersätter hide()/show() eller slide/fade‑beteenden, kontrollera:
aria-expandedprefers-reduced-motion)Att fånga dessa fall tidigt gör migrationen snabbare och UI:t mer pålitligt—även innan sista är borta.
addEventListener för händelserfetch + async/await för förfrågningarDärför behöver nya projekt inte lika ofta ett kompatibilitetslager för grundläggande uppgifter.
$.ajax()fetch()Små PR:er och staged rollouts minskar regressionsrisken.
Testa dynamiskt innehåll (element som läggs till efter sidladdning).
$()