{"id":172,"date":"2026-01-19T00:00:00","date_gmt":"2026-01-18T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/sv\/jquery-4-0-0-ar-har-vad-som-faktiskt-andras\/"},"modified":"2026-01-19T00:00:00","modified_gmt":"2026-01-18T23:00:00","slug":"jquery-4-0-0-ar-har-vad-som-faktiskt-andras","status":"publish","type":"post","link":"https:\/\/helloblog.io\/sv\/jquery-4-0-0-ar-har-vad-som-faktiskt-andras\/","title":{"rendered":"jQuery 4.0.0 \u00e4r h\u00e4r: vad som faktiskt \u00e4ndras (och vad du beh\u00f6ver g\u00f6ra)"},"content":{"rendered":"\n<p>Den 14 januari 2006 presenterade John Resig jQuery p\u00e5 BarCamp i New York. Nu, 20 \u00e5r senare, har jQuery-teamet sl\u00e4ppt den slutgiltiga versionen av <strong>jQuery 4.0.0<\/strong> efter en l\u00e5ng utvecklingscykel med flera pre-releases. Det h\u00e4r \u00e4r den f\u00f6rsta nya majorversionen p\u00e5 n\u00e4stan 10 \u00e5r \u2013 och ja, det finns breaking changes. Samtidigt \u00e4r f\u00f6rv\u00e4ntningen att de flesta projekt ska kunna uppgradera med ganska sm\u00e5 kodjusteringar, s\u00e4rskilt om du redan legat n\u00e4ra 3.7.x och undvikit gamla, utfasade API:er.<\/p>\n\n\n\n<p>M\u00e5nga av brytningarna \u00e4r s\u00e5dant teamet velat g\u00f6ra i \u00e5ratal, men som inte varit rimligt i patch- eller minorreleaser: man har skalat bort legacy-kod, rensat bort redan deprecierade API:er, tagit bort interna parametrar som r\u00e5kat vara \u00e5tkomliga via publika funktioner (utan att vara dokumenterade), och st\u00e4ngt n\u00e5gra \u201cmagiska\u201d beteenden som gjort koden on\u00f6digt sv\u00e5r att underh\u00e5lla.<\/p>\n\n\n\n<p>F\u00f6r migreringen finns b\u00e5de en officiell <a href=\"https:\/\/jquery.com\/upgrade-guide\/4.0\/\">upgrade guide<\/a> och en ny release av <a href=\"https:\/\/github.com\/jquery\/jquery-migrate\/\">jQuery Migrate plugin<\/a> (ett kompatibilitetslager som hj\u00e4lper dig hitta och hantera legacy-anrop). Om du springer p\u00e5 problem vill teamet att du rapporterar dem via GitHub-issues: <a href=\"https:\/\/github.com\/jquery\/jquery\/issues\">https:\/\/github.com\/jquery\/jquery\/issues<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">S\u00e5 distribueras 4.0.0 (CDN, npm och slim build)<\/h2>\n\n\n\n<p>Som vanligt finns 4.0.0 b\u00e5de via jQuery:s CDN och via npm. Tredjeparts-CDN:er brukar f\u00e5 in versionen efter ett tag, men jQuery-teamet styr inte deras scheman.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Direktl\u00e4nkar (main build)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>https:\/\/code.jquery.com\/jquery-4.0.0.js<\/li>\n\n\n<li>https:\/\/code.jquery.com\/jquery-4.0.0.min.js<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Installera via npm<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>npm install jquery@4.0.0\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">npm<\/span><span style=\"color:#9ECBFF\"> install<\/span><span style=\"color:#9ECBFF\"> jquery@4.0.0<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Slim build (utan ajax, Deferreds och Callbacks)<\/h3>\n\n\n\n<p>jQuery 4.0.0 forts\u00e4tter med en separat \u201cslim\u201d-variant f\u00f6r dig som inte beh\u00f6ver ajax-modulerna, f\u00f6redrar frist\u00e5ende bibliotek f\u00f6r HTTP, och som ofta l\u00e5ter CSS + klassmanipulation sk\u00f6ta animationer. I 4.0.0 har slim build blivit \u00e4nnu mindre eftersom <strong>Deferreds<\/strong> och <strong>Callbacks<\/strong> nu plockats bort (ungef\u00e4r <strong>19,5 kB gzippat<\/strong>). Slim \u00e4r samtidigt runt <strong>8 kB gzippat<\/strong> mindre \u00e4n den fulla versionen.<\/p>\n\n\n\n<p>Deferreds har l\u00e4nge f\u00f6ljt <a href=\"https:\/\/promisesaplus.com\/\">Promises A+<\/a>, s\u00e5 i de flesta fall kan du migrera till native <code>Promise<\/code>. Native Promises finns i alla webbl\u00e4sare som jQuery 4.0 st\u00f6djer \u2013 <strong>f\u00f6rutom IE11<\/strong>. Om du m\u00e5ste st\u00f6dja IE11 \u00e4r rekommendationen att anv\u00e4nda main build eller l\u00e4gga till en Promise-polyfill.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>https:\/\/code.jquery.com\/jquery-4.0.0.slim.js<\/li>\n\n\n<li>https:\/\/code.jquery.com\/jquery-4.0.0.slim.min.js<\/li>\n\n<\/ul>\n\n\n\n<p>Allm\u00e4n info om alla distributionss\u00e4tt (inkl. CDN, npm och Bower) finns h\u00e4r: https:\/\/jquery.com\/download\/.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Breaking change: st\u00f6d f\u00f6r IE<11 \u00e4r borttaget (och fler gamla browsers ryker)<\/h2>\n\n\n\n<p>Den mest f\u00f6rv\u00e4ntade, men \u00e4nd\u00e5 viktiga, brytningen: <strong>jQuery 4.0 slutar st\u00f6dja IE 10 och \u00e4ldre<\/strong>. Det kan v\u00e4cka fr\u00e5gan varf\u00f6r IE11 inte r\u00f6k samtidigt. Planen \u00e4r enligt teamet att g\u00f6ra det stegvis, och n\u00e4sta steg \u2013 allts\u00e5 att \u00e4ven ta bort IE11-st\u00f6d \u2013 \u00e4r t\u00e4nkt att landa i <strong>jQuery 5.0<\/strong> (se PR-referens: https:\/\/github.com\/jquery\/jquery\/pull\/5077). I 4.0 b\u00f6rjar man med att rensa ut kod som specifikt beh\u00f6vts f\u00f6r IE-versioner \u00e4ldre \u00e4n 11.<\/p>\n\n\n\n<p>Ut\u00f6ver detta f\u00f6rsvinner st\u00f6d f\u00f6r fler riktigt gamla milj\u00f6er: <strong>Edge Legacy<\/strong>, <strong>iOS-versioner \u00e4ldre \u00e4n de senaste 3<\/strong>, <strong>Firefox-versioner \u00e4ldre \u00e4n de senaste 2<\/strong> (med undantag f\u00f6r <strong>Firefox ESR<\/strong>) samt <strong>Android Browser<\/strong>. F\u00f6r de flesta ska det h\u00e4r inte kr\u00e4va kod\u00e4ndringar, men om din produkt m\u00e5ste st\u00f6dja n\u00e5gon av dessa webbl\u00e4sare b\u00f6r du stanna p\u00e5 <strong>jQuery 3.x<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Trusted Types och CSP: mindre friktion med modern s\u00e4kerhetspolicy<\/h2>\n\n\n\n<p>jQuery 4.0 l\u00e4gger till st\u00f6d f\u00f6r <strong>Trusted Types<\/strong> (se referensl\u00e4nk: https:\/\/twitter.com\/kkotowicz\/status\/1445713282128515074). Po\u00e4ngen \u00e4r att HTML som \u00e4r inpackad i <strong>TrustedHTML<\/strong> (MDN: https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/TrustedHTML) ska kunna skickas in till jQuery:s DOM-manipulationsmetoder utan att bryta mot CSP-direktivet <code>require-trusted-types-for<\/code>.<\/p>\n\n\n\n<p>Parallellt har teamet \u00e4ndrat hur asynkrona script-requests hanteras ur CSP-perspektiv. Tidigare anv\u00e4nde vissa AJAX-fl\u00f6den redan <code>&lt;script&gt;<\/code>-taggar f\u00f6r att bevara attribut som <code>crossdomain<\/code>. Nu har man <strong>bytt s\u00e5 att de flesta asynkrona script-requests g\u00e5r via <code>&lt;script&gt;<\/code>-taggar<\/strong> (PR: https:\/\/github.com\/jquery\/jquery\/pull\/4763) f\u00f6r att undvika CSP-fel som kan uppst\u00e5 n\u00e4r inline scripts anv\u00e4nds.<\/p>\n\n\n\n<p>Det finns fortfarande n\u00e5gra situationer d\u00e4r <strong>XHR<\/strong> anv\u00e4nds f\u00f6r asynkrona script-requests \u2013 ett exempel \u00e4r n\u00e4r du skickar in alternativet <code>&quot;headers&quot;<\/code>. I de fallen uppmanar teamet att du i st\u00e4llet anv\u00e4nder <strong><code>scriptAttrs<\/code><\/strong>. Grundprincipen i 4.0 \u00e4r: anv\u00e4nd <code>&lt;script&gt;<\/code> n\u00e4r det g\u00e5r, och fall tillbaka till XHR endast n\u00e4r det beh\u00f6vs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kodbasen har migrerats fr\u00e5n AMD till ES modules (och byggs med Rollup)<\/h2>\n\n\n\n<p>En av de st\u00f6rsta moderniseringarna \u00e4r att jQuery-k\u00e4llkoden p\u00e5 <code>main<\/code>-branchen har migrerats fr\u00e5n <strong>AMD<\/strong> (bakgrunden finns h\u00e4r: https:\/\/requirejs.org\/docs\/whyamd.html) till <strong>ES modules<\/strong> (PR: https:\/\/github.com\/jquery\/jquery\/pull\/4541). K\u00e4llkoden har visserligen alltid publicerats med releaser p\u00e5 npm och GitHub, men historiskt har den inte g\u00e5tt att importera som moduler utan <strong>RequireJS<\/strong> (https:\/\/requirejs.org\/), eftersom RequireJS ocks\u00e5 var jQuery:s f\u00f6redragna byggverktyg.<\/p>\n\n\n\n<p>I och med 4.0 har man g\u00e5tt \u00f6ver till <strong>Rollup<\/strong> f\u00f6r paketeringen (https:\/\/rollupjs.org\/introduction\/) och man k\u00f6r testsviten \u00e4ven mot ES modules separat. Resultatet \u00e4r att jQuery blir mer kompatibelt med moderna build tools och workflows \u2013 och \u00e4ven mer direkt anv\u00e4ndbart i browsers via <code>&lt;script type=module&gt;<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deprecierade API:er \u00e4r borttagna (byt till native d\u00e4r det g\u00e5r)<\/h2>\n\n\n\n<p>I en majorrelease passar man p\u00e5 att faktiskt st\u00e4da. Ett antal funktioner har varit deprecierade i flera versioner och tas nu bort helt. Motiveringen \u00e4r att de antingen alltid varit t\u00e4nkta som interna, eller att de numera har bra native-motsvarigheter i alla webbl\u00e4sare som jQuery 4.0 st\u00f6djer.<\/p>\n\n\n\n<p>De borttagna funktionerna \u00e4r:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>jQuery.isArray<\/code><\/li>\n\n\n<li><code>jQuery.parseJSON<\/code><\/li>\n\n\n<li><code>jQuery.trim<\/code><\/li>\n\n\n<li><code>jQuery.type<\/code><\/li>\n\n\n<li><code>jQuery.now<\/code><\/li>\n\n\n<li><code>jQuery.isNumeric<\/code><\/li>\n\n\n<li><code>jQuery.isFunction<\/code><\/li>\n\n\n<li><code>jQuery.isWindow<\/code><\/li>\n\n\n<li><code>jQuery.camelCase<\/code><\/li>\n\n\n<li><code>jQuery.nodeName<\/code><\/li>\n\n\n<li><code>jQuery.cssNumber<\/code><\/li>\n\n\n<li><code>jQuery.cssProps<\/code><\/li>\n\n\n<li><code>jQuery.fx.interval<\/code><\/li>\n\n<\/ul>\n\n\n\n<p>Rekommendationen \u00e4r att anv\u00e4nda native-alternativ som <code>Array.isArray()<\/code>, <code>JSON.parse()<\/code>, <code>String.prototype.trim()<\/code> och <code>Date.now()<\/code>.<\/p>\n\n\n\n<p>Kombinationen av att rensa ut de h\u00e4r deprecierade API:erna och att kapa gammal IE-kod g\u00f6r att paketet enligt releasen blir <strong>\u00f6ver 3 kB mindre (gzippat)<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Interna Array-metoder \u00e4r borttagna fr\u00e5n jQuery-prototypen<\/h2>\n\n\n\n<p>jQuery-prototypen har l\u00e4nge inneh\u00e5llit Array-metoder som aldrig betett sig som \u201cvanliga\u201d jQuery-metoder och som varit avsedda f\u00f6r internt bruk: <strong><code>push<\/code><\/strong>, <strong><code>sort<\/code><\/strong> och <strong><code>splice<\/code><\/strong>. I 4.0 tas de bort fr\u00e5n prototypen.<\/p>\n\n\n\n<p>Om du (eller ett plugin) r\u00e5kat anv\u00e4nda dem direkt p\u00e5 en jQuery-collection finns en rak ers\u00e4ttning. Exemplet i releasen:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ F\u00f6rr (om du r\u00e5kat g\u00f6ra s\u00e5 h\u00e4r):\n\/\/ $elems.push( elem )\n\n\/\/ Nu:\n[].push.call( $elems, elem );\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#6A737D\">\/\/ F\u00f6rr (om du r\u00e5kat g\u00f6ra s\u00e5 h\u00e4r):<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">\/\/ $elems.push( elem )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">\/\/ Nu:<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">[].push.<\/span><span style=\"color:#B392F0\">call<\/span><span style=\"color:#E1E4E8\">( $elems, elem );<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Fokus\/blur-event: ordningen f\u00f6ljer nu W3C-spec (breaking change)<\/h2>\n\n\n\n<p>En subtil men potentiellt jobbig brytning: ordningen p\u00e5 fokus-relaterade events. Under l\u00e5ng tid har browsers inte varit \u00f6verens om eventordningen f\u00f6r <code>focusin<\/code>, <code>focusout<\/code>, <code>focus<\/code> och <code>blur<\/code>. Nu har de senaste versionerna av alla browsers som jQuery 4.0 st\u00f6djer konvergerat till en gemensam ordning.<\/p>\n\n\n\n<p>Problemet \u00e4r att den ordningen skiljer sig fr\u00e5n den konsekventa ordning som jQuery valde f\u00f6r flera \u00e5r sedan. Det blir d\u00e4rf\u00f6r en breaking change f\u00f6r kod som implicit f\u00f6rlitar sig p\u00e5 jQuerys tidigare beteende.<\/p>\n\n\n\n<p>Fr\u00e5n och med jQuery 4.0 slutar man att override:a native-beteende. Det inneb\u00e4r att alla browsers utom IE f\u00f6ljer nuvarande W3C-specifikation med f\u00f6ljande ordning:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>blur<\/li>\n\n\n<li>focusout<\/li>\n\n\n<li>focus<\/li>\n\n\n<li>focusin<\/li>\n\n<\/ol>\n\n\n\n<p>I tidigare jQuery-versioner var ordningen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>focusout<\/li>\n\n\n<li>blur<\/li>\n\n\n<li>focusin<\/li>\n\n\n<li>focus<\/li>\n\n<\/ul>\n\n\n\n<p>En ironisk detalj som n\u00e4mns i releasen: den enda browsern som n\u00e5gonsin f\u00f6ljde den gamla W3C-specen (innan den uppdaterades 2023) var Internet Explorer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00d6vriga highlights som \u00e4r bra att k\u00e4nna till (utan att l\u00e4sa hela diffen)<\/h2>\n\n\n\n<p>\u00c4ven om det h\u00e4r inl\u00e4gget fokuserar p\u00e5 de st\u00f6rsta f\u00f6r\u00e4ndringarna finns det en hel del detaljer i changeloggen. N\u00e5gra punkter som ofta dyker upp i verkliga kodbaser:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ajax: beteenden kring scripts, JSONP och bin\u00e4r data har skruvats<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Array-data ska inte behandlas som bin\u00e4rt.<\/li>\n\n\n<li><code>processData: true<\/code> till\u00e5ts \u00e4ven f\u00f6r bin\u00e4r data.<\/li>\n\n\n<li>Bin\u00e4r data st\u00f6ds (inklusive <code>FormData<\/code>).<\/li>\n\n\n<li><code>headers<\/code> st\u00f6ds f\u00f6r script transport \u00e4ven cross-domain (issue #5142).<\/li>\n\n\n<li><code>null<\/code> accepteras som success callback i <code>jQuery.get<\/code> (issue #4989).<\/li>\n\n\n<li>Scripts auto-exekveras inte om du inte anger <code>dataType<\/code> (issue #4822).<\/li>\n\n\n<li><code>responseJSON<\/code> fungerar f\u00f6r felaktiga same-domain JSONP-requests.<\/li>\n\n\n<li>JSONP error script responses exekveras (issue #4771).<\/li>\n\n\n<li>CSP-fel i script transport f\u00f6r async requests undviks (issue #3969).<\/li>\n\n\n<li>Auto-promotion fr\u00e5n json till jsonp tas bort (issues #1799, #3376).<\/li>\n\n\n<li><code>contentType<\/code> skrivs \u00f6ver av response header <code>content-type<\/code> om den finns (issue #4119).<\/li>\n\n\n<li>AJAX event aliases deprecieras (alias\/inline till deprecated).<\/li>\n\n\n<li>Scripts k\u00f6rs inte vid misslyckade HTTP-svar (issue #4250).<\/li>\n\n\n<li><code>jQuery.ajaxSettings.xhr<\/code> f\u00f6renklas (issue #1967).<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Attributes\/CSS: flera kantfall och signaturer har st\u00e4dats<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>.attr( name, false )<\/code> tar bort attributet f\u00f6r alla icke-ARIA-attribut (issue #5388).<\/li>\n\n\n<li>Attributv\u00e4rden str\u00e4ngifieras inte i setter (issue #4948).<\/li>\n\n\n<li>Signaturen <code>toggleClass(boolean|undefined)<\/code> tas bort (issue #3388).<\/li>\n\n\n<li><code>val()<\/code> refaktoreras: strippar inte carriage return och isolerar IE-workarounds.<\/li>\n\n\n<li><code>type<\/code>-attr hook s\u00e4tts inte utanf\u00f6r IE.<\/li>\n\n\n<li>Fixar dimensioner f\u00f6r table <code>&lt;col&gt;<\/code> (issue #5628).<\/li>\n\n\n<li>Cache i finalPropName tas bort.<\/li>\n\n\n<li>Tester uppdateras och k\u00f6rbara under CSS Zoom (issue #5489).<\/li>\n\n\n<li>St\u00f6dtest f\u00f6r <code>reliableTrDimensions<\/code> fixas f\u00f6r initialt dolda iframes.<\/li>\n\n\n<li>Selektor: align med 3.x, tar bort yttre <code>selector.js<\/code> wrapper.<\/li>\n\n\n<li>St\u00f6dtest f\u00f6r <code>reliableTrDimensions<\/code> funkar med Bootstrap CSS (issue #5270).<\/li>\n\n\n<li><code>offsetHeight( true )<\/code> m.fl. inkluderar negativa marginaler (issue #3982).<\/li>\n\n\n<li>Whitespace-only CSS-variabler returnerar <code>undefined<\/code> (#5120).<\/li>\n\n\n<li>Whitespace trimmas inte f\u00f6r <code>undefined<\/code> custom property (issue #5105).<\/li>\n\n\n<li><code>addClass( array )<\/code> skippar falsy values, komprimerad kod (issue #4998).<\/li>\n\n\n<li>Whitespace runt CSS Custom Properties trimmas (issue #4926).<\/li>\n\n\n<li><code>show<\/code>, <code>hide<\/code> och <code>toggle<\/code> ing\u00e5r i slim build.<\/li>\n\n\n<li>Opacity CSS hook tas bort.<\/li>\n\n\n<li>Workaround f\u00f6r buggy getComputedStyle p\u00e5 table rows i IE\/Edge (issue #4490).<\/li>\n\n\n<li>jQuery slutar auto-appenda &#8220;px&#8221; till properties, med n\u00e5gra undantag (issue #2795).<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Core\/Selector\/Event: flera interna f\u00f6renklingar och nya\/\u00e4ndrade ytor<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>$.parseHTML<\/code> byter fr\u00e5n <code>document.implementation<\/code> till <code>DOMParser<\/code>.<\/li>\n\n\n<li>Exports-setup fixas s\u00e5 bundlers funkar med ESM &#038; CommonJS (issue #5416).<\/li>\n\n\n<li>Mer info om named exports l\u00e4ggs till.<\/li>\n\n\n<li>Factory flyttas till separata exports.<\/li>\n\n\n<li>Named exports anv\u00e4nds i <code>src\/<\/code> (issue #5262).<\/li>\n\n\n<li>Regression fixas i <code>jQuery.text()<\/code> p\u00e5 HTMLDocument (issue #5264).<\/li>\n\n\n<li><code>jQuery.contains<\/code> flyttas fr\u00e5n selector till core-modulen.<\/li>\n\n\n<li>Root-parametern i <code>jQuery.fn.init<\/code> tas bort.<\/li>\n\n\n<li>Kod ska inte f\u00f6rlita sig p\u00e5 att <code>splice<\/code> finns p\u00e5 input.<\/li>\n\n\n<li>Grundl\u00e4ggande TrustedHTML-st\u00f6d i manipulation (issue #4409).<\/li>\n\n\n<li>Browser-fel rapporteras i <code>parseXML<\/code> (issue #4784).<\/li>\n\n\n<li><code>jQuery.isXMLDoc<\/code> accepterar falsy input (issue #4782).<\/li>\n\n\n<li>Edge Legacy-st\u00f6d tas bort (issue #4568).<\/li>\n\n\n<li>Iframe-script exekveras i sin kontext; doc-param i <code>globalEval<\/code> (issue #4518).<\/li>\n\n\n<li><code>Array.prototype.flat<\/code> anv\u00e4nds d\u00e4r det st\u00f6ds (issue #4320).<\/li>\n\n\n<li>Privata kopior av push\/sort\/splice tas bort fr\u00e5n prototypen.<\/li>\n\n\n<li><code>.even()<\/code> och <code>.odd()<\/code> implementeras som ers\u00e4ttning f\u00f6r POS <code>:even<\/code> och <code>:odd<\/code>.<\/li>\n\n\n<li>IE-specifika support tests tas bort; <code>document.documentMode<\/code> anv\u00e4nds.<\/li>\n\n\n<li>Event: <code>event.which<\/code>-shim tas bort (issue #3235).<\/li>\n\n\n<li><code>jQuery.event.global<\/code> tas bort.<\/li>\n\n\n<li>Stoppar shimming av focusin &#038; focusout (issue #4300).<\/li>\n\n\n<li>Selector: workaround f\u00f6r <code>:has<\/code> tas bort; testas p\u00e5 iPhone &#038; iPad.<\/li>\n\n\n<li><code>jQuery.expr[ &quot;:&quot; ]<\/code> \/ <code>jQuery.expr.filters<\/code> deprecieras korrekt.<\/li>\n\n\n<li>jQuery.find.{tokenize,select,compile,setDocument} exponeras igen (issue #5259).<\/li>\n\n\n<li><code>uniqueSort<\/code> blir chainable-metod (issue #5166).<\/li>\n\n\n<li><code>selector-native.js<\/code> \u00e5terintroduceras.<\/li>\n\n\n<li>Sizzle inlines i selector-modulen och Sizzle-tester portas till jQuery.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Uppgraderingsstrategi i praktiken<\/h2>\n\n\n\n<p>Eftersom 4.0.0 \u00e4r en major \u00e4r det v\u00e4rt att g\u00f6ra uppgraderingen lite mer kontrollerat \u00e4n \u201cbumpa version och hoppas\u201d. Den officiella v\u00e4gen \u00e4r att:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>L\u00e4sa <a href=\"https:\/\/jquery.com\/upgrade-guide\/4.0\/\">upgrade guide<\/a> och j\u00e4mf\u00f6ra mot din kodbas (s\u00e4rskilt om du har plugins\/legacy).<\/li>\n\n\n<li>K\u00f6ra med <a href=\"https:\/\/github.com\/jquery\/jquery-migrate\/\">jQuery Migrate plugin<\/a> under test f\u00f6r att hitta de vanligaste legacy-m\u00f6nstren.<\/li>\n\n\n<li>Se \u00f6ver browser support-krav: beh\u00f6ver du IE10\/Edge Legacy\/Android Browser eller gammal iOS\/Firefox, stanna p\u00e5 jQuery 3.x.<\/li>\n\n\n<li>Om du har CSP h\u00e5rt l\u00e5st: verifiera script-loader-fl\u00f6den och att du inte f\u00f6rlitar dig p\u00e5 inline-script-beteenden.<\/li>\n\n\n<li>Testa fokus\/blur-fl\u00f6den (formul\u00e4r, modaler, custom widgets) eftersom eventordningen \u00e4ndrats.<\/li>\n\n\n<li>Om du k\u00f6r slim build: dubbelkolla att du inte beh\u00f6ver Deferreds\/Callbacks eller ajax \u2013 annars byt till main build eller anv\u00e4nd native Promises (med ev. polyfill f\u00f6r IE11).<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">20 \u00e5r jQuery \u2013 och en release mitt i en \u00e5tertr\u00e4ff<\/h2>\n\n\n\n<p>I releasen n\u00e4mns ocks\u00e5 att m\u00e5nga ur communityt tr\u00e4ffades f\u00f6r en \u00e5terf\u00f6rening i Dallas, och att John Resig deltog via Zoom. 4.0.0-inl\u00e4gget publicerades medan gruppen var samlad.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1804\" height=\"1359\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/13\/2026\/01\/jquery-reunion-group-edited.jpeg\" alt=\"Gruppfoto fr\u00e5n jQuery-\u00e5tertr\u00e4ff (20-\u00e5rsjubileum)\" class=\"wp-image-171\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/13\/2026\/01\/jquery-reunion-group-edited.jpeg 1804w, https:\/\/helloblog.io\/app\/uploads\/sites\/13\/2026\/01\/jquery-reunion-group-edited-300x226.jpeg 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/13\/2026\/01\/jquery-reunion-group-edited-1024x771.jpeg 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/13\/2026\/01\/jquery-reunion-group-edited-768x579.jpeg 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/13\/2026\/01\/jquery-reunion-group-edited-1536x1157.jpeg 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/13\/2026\/01\/jquery-reunion-group-edited-400x301.jpeg 400w\" sizes=\"auto, (max-width: 1804px) 100vw, 1804px\" \/><figcaption class=\"wp-element-caption\"><em>Forr\u00e1s: blog.jquery.com \/ The jQuery Foundation<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Full changelog och j\u00e4mf\u00f6relse<\/h2>\n\n\n\n<p>Vill du gr\u00e4va i varenda commit finns en komplett j\u00e4mf\u00f6relse mellan 3.7.1 och 4.0.0 h\u00e4r: <a href=\"https:\/\/github.com\/jquery\/jquery\/compare\/3.7.1...4.0.0\">4.0.0<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tacklistan (contributors)<\/h2>\n\n\n\n<p>Releasen tackar alla som bidragit med patchar, buggrapporter och testning, inklusive: <a href=\"https:\/\/github.com\/sashashura\">Alex<\/a>, <a href=\"https:\/\/github.com\/aelafifi\">Ahmed S. El-Afifi<\/a>, <a href=\"https:\/\/github.com\/fecore1\">fecore1<\/a>, <a href=\"https:\/\/github.com\/fras2560\">Dallas Fraser<\/a>, <a href=\"https:\/\/github.com\/gibson042\">Richard Gibson<\/a>, <a href=\"https:\/\/github.com\/mgol\">Micha\u0142 Go\u0142\u0119biowski-Owczarek<\/a>, <a href=\"https:\/\/github.com\/pgrimaud\">Pierre Grimaud<\/a>, <a href=\"https:\/\/github.com\/gabibguti\">Gabriela Gutierrez<\/a>, <a href=\"https:\/\/github.com\/vanillajonathan\">Jonathan<\/a>, <a href=\"https:\/\/github.com\/Necmttn\">Necmettin Karakaya<\/a>, <a href=\"https:\/\/github.com\/andersk\">Anders Kaseorg<\/a>, <a href=\"https:\/\/github.com\/wonseop\">Wonseop Kim<\/a>, <a href=\"https:\/\/github.com\/simon04\">Simon Legner<\/a>, <a href=\"https:\/\/github.com\/ShashankaNataraj\">Shashanka Nataraj<\/a>, <a href=\"https:\/\/github.com\/patocallaghan\">Pat O&#8217;Callaghan<\/a>, <a href=\"https:\/\/github.com\/coliff\">Christian Oliff<\/a>, <a href=\"https:\/\/github.com\/DimitriPapadopoulos\">Dimitri Papadopoulos Orfanos<\/a>, <a href=\"https:\/\/github.com\/wonhyoung05\">Wonhyoung Park<\/a>, <a href=\"https:\/\/github.com\/bubbatls\">Bruno PIERRE<\/a>, <a href=\"https:\/\/github.com\/renbaoshuo\">Baoshuo Ren<\/a>, <a href=\"https:\/\/github.com\/beatrizrezener\">Beatriz Rezener<\/a>, <a href=\"https:\/\/github.com\/skrobinson\">Sean Robinson<\/a>, <a href=\"https:\/\/github.com\/edg2s\">Ed Sanders<\/a>, <a href=\"https:\/\/github.com\/Krinkle\">Timo Tijhof<\/a>, <a href=\"https:\/\/github.com\/gaohuia\">Tom<\/a>, <a href=\"https:\/\/github.com\/wenz\">Christian Wenz<\/a>, <a href=\"https:\/\/github.com\/ygj6\">ygj6<\/a> samt hela jQuery-teamet.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Referenser \/ K\u00e4llor<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/blog.jquery.com\/2026\/01\/17\/jquery-4-0-0\/\" target=\"_blank\" rel=\"noopener noreferrer\">jQuery 4.0.0<\/a><\/li><li><a href=\"https:\/\/jquery.com\/upgrade-guide\/4.0\/\" target=\"_blank\" rel=\"noopener noreferrer\">jQuery Upgrade Guide 4.0<\/a><\/li><li><a href=\"https:\/\/github.com\/jquery\/jquery-migrate\/\" target=\"_blank\" rel=\"noopener noreferrer\">jquery\/jquery-migrate<\/a><\/li><li><a href=\"https:\/\/github.com\/jquery\/jquery\/compare\/3.7.1...4.0.0\" target=\"_blank\" rel=\"noopener noreferrer\">Full changelog: 4.0.0 (compare 3.7.1&#8230;4.0.0)<\/a><\/li><li><a href=\"https:\/\/github.com\/jquery\/jquery\/pull\/4763\" target=\"_blank\" rel=\"noopener noreferrer\">Switch most asynchronous script requests to use &lt;script&gt; tags<\/a><\/li><li><a href=\"https:\/\/github.com\/jquery\/jquery\/pull\/4541\" target=\"_blank\" rel=\"noopener noreferrer\">jQuery source migrated from AMD to ES modules<\/a><\/li><li><a href=\"https:\/\/github.com\/jquery\/jquery\/pull\/5077\" target=\"_blank\" rel=\"noopener noreferrer\">Remove support in stages; IE11 next step in jQuery 5.0<\/a><\/li><li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/TrustedHTML\" target=\"_blank\" rel=\"noopener noreferrer\">TrustedHTML &#8211; MDN Web Docs<\/a><\/li><li><a href=\"https:\/\/twitter.com\/kkotowicz\/status\/1445713282128515074\" target=\"_blank\" rel=\"noopener noreferrer\">Trusted Types reference tweet<\/a><\/li><li><a href=\"https:\/\/requirejs.org\/docs\/whyamd.html\" target=\"_blank\" rel=\"noopener noreferrer\">AMD &#8211; Why AMD? (RequireJS)<\/a><\/li><li><a href=\"https:\/\/requirejs.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">RequireJS<\/a><\/li><li><a href=\"https:\/\/rollupjs.org\/introduction\/\" target=\"_blank\" rel=\"noopener noreferrer\">Rollup introduction<\/a><\/li><li><a href=\"https:\/\/promisesaplus.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Promises\/A+<\/a><\/li><li><a href=\"https:\/\/jquery.com\/download\/\" target=\"_blank\" rel=\"noopener noreferrer\">jQuery Download<\/a><\/li><li><a href=\"https:\/\/github.com\/jquery\/jquery\/issues\" target=\"_blank\" rel=\"noopener noreferrer\">Report jQuery issues<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>N\u00e4stan ett decennium efter senaste majoren kommer jQuery 4.0.0 med moderniserad kodbas, mindre legacy och n\u00e5gra skarpa breaking changes. H\u00e4r \u00e4r allt du beh\u00f6ver ha koll p\u00e5 innan du uppgraderar.<\/p>\n","protected":false},"author":62,"featured_media":170,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[90],"tags":[93,94,95,92,91],"class_list":["post-172","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript","tag-csp","tag-es-modules","tag-frontend","tag-javascript","tag-jquery"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/posts\/172","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/users\/62"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/comments?post=172"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/posts\/172\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/media\/170"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/media?parent=172"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/categories?post=172"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/tags?post=172"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}