{"id":151,"date":"2026-01-19T00:00:00","date_gmt":"2026-01-18T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/fi\/jquery-4-0-0-muutokset-paivitysopas\/"},"modified":"2026-01-19T00:00:00","modified_gmt":"2026-01-18T23:00:00","slug":"jquery-4-0-0-muutokset-paivitysopas","status":"publish","type":"post","link":"https:\/\/helloblog.io\/fi\/jquery-4-0-0-muutokset-paivitysopas\/","title":{"rendered":"jQuery 4.0.0 on t\u00e4\u00e4ll\u00e4: mit\u00e4 muuttui ja mihin p\u00e4ivityksess\u00e4 kannattaa varautua"},"content":{"rendered":"\n<p>jQuery t\u00e4ytti hiljattain 20 vuotta: John Resig esitteli kirjaston BarCampissa New Yorkissa 14.1.2006. Nyt jQuery-tiimi on julkaissut pitk\u00e4n kehityssyklin ja useiden ennakkoversioiden j\u00e4lkeen lopullisen <strong>jQuery 4.0.0<\/strong> -version.<\/p>\n\n\n\n<p>T\u00e4m\u00e4 on ensimm\u00e4inen major-versio l\u00e4hes kymmeneen vuoteen. Mukana on modernisointeja, pienempi\u00e4 ja isompia siivouksia sek\u00e4 my\u00f6s muutoksia, jotka voivat rikkoa vanhaa koodia. Hyv\u00e4 uutinen on, ett\u00e4 julkaisun mukaan valtaosa projekteista pystyy p\u00e4ivitt\u00e4m\u00e4\u00e4n melko v\u00e4hill\u00e4 muutoksilla \u2013 kunhan k\u00e4y olennaiset kohdat l\u00e4pi.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-info is-style-info is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">P\u00e4ivitysty\u00f6kalut<\/h4>\n\n\n<p>jQuery-tiimi on julkaissut p\u00e4ivityst\u00e4 varten <strong>upgrade guide<\/strong> -oppaan sek\u00e4 <strong>jQuery Migrate<\/strong> -pluginin. Jos t\u00f6rm\u00e4\u00e4t ongelmiin, ne kannattaa raportoida jQueryn GitHub-issueihin.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Miten jQuery 4.0.0 -julkaisu on saatavilla?<\/h2>\n\n\n\n<p>4.0.0 l\u00f6ytyy kuten ennenkin sek\u00e4 jQueryn omasta CDN:st\u00e4 ett\u00e4 npm:st\u00e4. Kolmansien osapuolten CDN:t p\u00e4ivittyv\u00e4t tyypillisesti hieman viiveell\u00e4 (julkaisuaikataulut eiv\u00e4t ole jQuery-tiimin hallinnassa). Jos haluat l\u00e4hte\u00e4 liikkeelle heti, k\u00e4yt\u00e4 jQueryn omaa CDN:\u00e4\u00e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Suorat CDN-linkit (t\u00e4ysi 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\">npm-asennus<\/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\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>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Merkitt\u00e4vimm\u00e4t muutokset: mit\u00e4 sinun pit\u00e4\u00e4 oikeasti tiet\u00e4\u00e4?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1) IE<11-tuki poistui (IE11 viel\u00e4 mukana \u2013 toistaiseksi)<\/h3>\n\n\n\n<p>jQuery 4.0 tiputtaa tuen <strong>IE10:lle ja sit\u00e4 vanhemmille<\/strong>. Moni kysyy, miksei IE11:st\u00e4 luovuttu saman tien: tiimi etenee vaiheittain, ja seuraava askel on suunnitelmien mukaan <strong>jQuery 5.0:ssa<\/strong>.<\/p>\n\n\n\n<p>Samassa yhteydess\u00e4 tuki poistui my\u00f6s joukolta muita todella vanhoja selaimia: <strong>Edge Legacy<\/strong> (vanha, ei-Chromium Edge), <strong>iOS<\/strong>-versiot aiempaa viimeist\u00e4 kolmea vanhemmat, <strong>Firefox<\/strong>-versiot aiempaa viimeist\u00e4 kahta vanhemmat (poikkeuksena Firefox ESR) sek\u00e4 <strong>Android Browser<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-warning is-style-warning is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Jos vanha selain on pakko tukea<\/h4>\n\n\n<p>Jos sinun t\u00e4ytyy tukea mit\u00e4\u00e4n n\u00e4ist\u00e4 poistuneista selaimista, k\u00e4yt\u00e4nn\u00f6n suositus on pysy\u00e4 <strong>jQuery 3.x<\/strong> -linjassa.<\/p>\n\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">2) Trusted Types ja CSP: turvallisempi HTML-k\u00e4sittely ja v\u00e4hemm\u00e4n CSP-kompastuksia<\/h3>\n\n\n\n<p>jQuery 4.0 tuo tuen <strong>Trusted Types<\/strong> -mallille. K\u00e4yt\u00e4nn\u00f6ss\u00e4 t\u00e4m\u00e4 tarkoittaa, ett\u00e4 jos sovelluksesi k\u00e4ytt\u00e4\u00e4 selaimen tarjoamaa <code>TrustedHTML<\/code>-tyyppi\u00e4 (ks. MDN: <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/TrustedHTML\">TrustedHTML<\/a>), sen voi sy\u00f6tt\u00e4\u00e4 jQueryn DOM-manipulaatiometodeille tavalla, joka ei riko <code>require-trusted-types-for<\/code>-Content Security Policy -direktiivi\u00e4.<\/p>\n\n\n\n<p>Lis\u00e4ksi jQuery on muuttanut tapaa, jolla se tekee asynkronisia skriptipyynt\u00f6j\u00e4: aiemmin osa AJAX-skriptikuljetuksesta k\u00e4ytti jo <code>&lt;script&gt;<\/code>-tageja (mm. attribuuttien kuten <code>crossdomain<\/code> s\u00e4ilytt\u00e4miseksi), mutta nyt <strong>suurin osa asynkronisista script-requesteista tehd\u00e4\u00e4n <code>&lt;script&gt;<\/code>-tagin kautta<\/strong>. Tavoite on v\u00e4hent\u00e4\u00e4 CSP-virheit\u00e4, joita syntyy inline-scriptien k\u00e4yt\u00f6st\u00e4.<\/p>\n\n\n\n<p>Muutama poikkeus on edelleen olemassa: joissain tapauksissa jQuery k\u00e4ytt\u00e4\u00e4 yh\u00e4 XHR:\u00e4\u00e4 asynkronisiin skriptipyynt\u00f6ihin, esimerkiksi silloin kun <code>&quot;headers&quot;<\/code>-optio on k\u00e4yt\u00f6ss\u00e4. T\u00e4ll\u00f6in julkaisun suositus on k\u00e4ytt\u00e4\u00e4 <code>scriptAttrs<\/code>-vaihtoehtoa <code>headers<\/code>-option sijaan.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3) L\u00e4hdekoodi siirtyi AMD:st\u00e4 ES moduleihin (ESM) ja paketointi Rollupilla<\/h3>\n\n\n\n<p>Yksi isoimmista \u201ckonehuoneen\u201d muutoksista on se, ett\u00e4 jQueryn <code>main<\/code>-haaran l\u00e4hdekoodi on migroitu <strong>AMD<\/strong>-moduuliformaatista <strong>ES moduleihin (ESM)<\/strong>. T\u00e4m\u00e4 on merkitt\u00e4v\u00e4\u00e4, koska jQueryn l\u00e4hdekoodi on kyll\u00e4 julkaistu npm:ss\u00e4 ja GitHubissa, mutta sit\u00e4 ei aiemmin voinut tuoda suoraan moduuleina ilman RequireJS:\u00e4\u00e4 (joka oli pitk\u00e4\u00e4n jQueryn valinta build-ty\u00f6kaluksi).<\/p>\n\n\n\n<p>Nyt jQuery paketoidaan <strong>Rollupilla<\/strong>, ja testit ajetaan erikseen my\u00f6s ES module -muodolle. T\u00e4m\u00e4n seurauksena jQuery istuu paremmin moderneihin build-ty\u00f6kaluihin ja ty\u00f6nkulkuihin \u2013 ja toimii my\u00f6s selaimissa suoraan <code> &lt;script type=module&gt; <\/code> -latauksella.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4) Poistettuja (pitk\u00e4\u00e4n deprekoituja) API:ja \u2013 siirry natiiveihin vastineisiin<\/h3>\n\n\n\n<p>Major-julkaisu on jQuerylle se hetki, jolloin vuosia deprekoidut asiat voidaan oikeasti poistaa. 4.0:ssa poistettiin joukko funktioita, jotka olivat joko alun perinkin sis\u00e4isi\u00e4 tai joille on nyky\u00e4\u00e4n natiivivastine kaikissa tuetuissa selaimissa.<\/p>\n\n\n\n<p>Poistetut funktiot ovat:<\/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>K\u00e4yt\u00e4nn\u00f6n korvaajat ovat tutut natiivit, kuten <code>Array.isArray()<\/code>, <code>JSON.parse()<\/code>, <code>String.prototype.trim()<\/code> ja <code>Date.now()<\/code>.<\/p>\n\n\n\n<p>Deprekoitujen API:jen poistaminen yhdistettyn\u00e4 vanhan IE-koodin siivoukseen pienensi jQueryn kokoa yli <strong>3 kt gzippattuna<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5) Sis\u00e4iset Array-metodit poistettiin jQuery-prototyypist\u00e4: push, sort, splice<\/h3>\n\n\n\n<p>jQueryn prototyyppi on pitk\u00e4\u00e4n sis\u00e4lt\u00e4nyt Array-metodeja, jotka eiv\u00e4t k\u00e4ytt\u00e4ytyneet kuten muut jQuery-metodit ja olivat k\u00e4yt\u00e4nn\u00f6ss\u00e4 tarkoitettu vain sis\u00e4iseen k\u00e4ytt\u00f6\u00f6n. N\u00e4m\u00e4 metodit ovat <code>push<\/code>, <code>sort<\/code> ja <code>splice<\/code>, ja ne on nyt poistettu jQuery-prototyypist\u00e4.<\/p>\n\n\n\n<p>Jos sinulla on ollut koodia, joka kutsuu n\u00e4it\u00e4 suoraan jQuery-kokoelmalle, julkaisussa annettu esimerkki korvaajasta on:<\/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>\/\/ ennen (ei en\u00e4\u00e4 toimi jQuery 4:ssa)\n\/\/ $elems.push( elem )\n\n\/\/ j\u00e4lkeen\n[].push.call( $elems, elem );\n\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\">\/\/ ennen (ei en\u00e4\u00e4 toimi jQuery 4:ssa)<\/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\">\/\/ j\u00e4lkeen<\/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>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">6) Focus\/blur-eventtien j\u00e4rjestys muuttui vastaamaan W3C-speksi\u00e4<\/h3>\n\n\n\n<p>Fokuseventtien j\u00e4rjestys on vuosia ollut selainten v\u00e4lill\u00e4 ep\u00e4yhten\u00e4inen (focusin, focusout, focus, blur). Uusimmissa selaimissa, joita jQuery 4.0 tukee, eventtij\u00e4rjestys on vihdoin yhten\u00e4istynyt \u2013 mutta se ei ole sama kuin se \u201ctasainen\u201d j\u00e4rjestys, jonka jQuery aikoinaan valitsi.<\/p>\n\n\n\n<p>jQuery 4.0 ei en\u00e4\u00e4 yliaja natiivia k\u00e4ytt\u00e4ytymist\u00e4. Se tarkoittaa, ett\u00e4 kaikki selaimet <strong>IE:t\u00e4 lukuun ottamatta<\/strong> noudattavat nykyist\u00e4 W3C-m\u00e4\u00e4rittely\u00e4, jossa j\u00e4rjestys on:<\/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>Aiemmissa jQuery-versioissa j\u00e4rjestys oli: <strong>focusout, blur, focusin, focus<\/strong>. Julkaisun ironinen huomio: ainoa selain, joka koskaan noudatti vanhaa W3C-speksi\u00e4 (ennen 2023 p\u00e4ivityst\u00e4), oli Internet Explorer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7) Slim-build on entist\u00e4 \u201cslimmer\u201d: Deferreds ja Callbacks poistettu<\/h3>\n\n\n\n<p>jQueryn slim-build (\u201dkevennetty\u201d paketti) pieneni jQuery 4.0.0:ssa entisest\u00e4\u00e4n, kun siit\u00e4 poistettiin <strong>Deferreds<\/strong> ja <strong>Callbacks<\/strong>. Koko on nyt noin <strong>19,5 kt gzippattuna<\/strong>.<\/p>\n\n\n\n<p>Deferred-objektit ovat jo pitk\u00e4\u00e4n tukeneet <strong>Promises A+<\/strong> -standardia, joten monessa tapauksessa voit siirty\u00e4 suoraan natiiveihin Promiseihin. Natiivit Promiset ovat saatavilla kaikissa jQuery 4.0:n tukemissa selaimissa <strong>paitsi IE11<\/strong>.<\/p>\n\n\n\n<p>Huomio: Deferredeiss\u00e4 on joitain lis\u00e4ominaisuuksia, joita natiivit Promiset eiv\u00e4t tarjoa, mutta iso osa k\u00e4yt\u00f6st\u00e4 on silti migroitavissa Promise-metodeihin.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-warning is-style-warning is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Jos IE11 on viel\u00e4 tuettavana<\/h4>\n\n\n<p>Jos sinun pit\u00e4\u00e4 tukea IE11:\u00e4, k\u00e4yt\u00e4 mieluummin t\u00e4ytt\u00e4 jQuery-buildia tai lis\u00e4\u00e4 polyfill natiiveille Promiseille.<\/p>\n\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Slim-buildin linkit<\/h3>\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<h2 class=\"wp-block-heading\">P\u00e4ivitysstrategia k\u00e4yt\u00e4nn\u00f6ss\u00e4: miten minimoit riskin?<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Lue virallinen p\u00e4ivitysohje: https:\/\/jquery.com\/upgrade-guide\/4.0\/<\/li>\n\n\n<li>Ota k\u00e4ytt\u00f6\u00f6n jQuery Migrate ja k\u00e4y konsolivaroitukset l\u00e4pi: https:\/\/github.com\/jquery\/jquery-migrate\/<\/li>\n\n\n<li>Testaa erityisesti: fokus\/blur-eventtiketjut (UI-komponentit, validoinnit), CSP\/Trusted Types -ymp\u00e4rist\u00f6t, sek\u00e4 kaikki koodi joka kutsui poistettuja <code>jQuery.*<\/code> apureita.<\/li>\n\n\n<li>Jos projekti on sidottu hyvin vanhoihin selaimiin (IE10-, Edge Legacy, Android Browser), pid\u00e4 jQuery 3.x tuotannossa ja suunnittele rinnalla refaktorointi.<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Changelog ja tekniset kohokohdat (tiivistettyn\u00e4, mutta kattavasti linkitettyn\u00e4)<\/h2>\n\n\n\n<p>Jos haluat k\u00e4yd\u00e4 muutokset commit-tasolla, virallinen vertailu on: <strong>Full changelog:<\/strong> <a href=\"https:\/\/github.com\/jquery\/jquery\/compare\/3.7.1...4.0.0\">4.0.0<\/a>. Alla on julkaisutiedotteen keskeiset osa-alueet ja esimerkkimuutoksia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ajax<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Don&#8217;t treat array data as binary (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/992a1911d0b6195012edc25fd5a48810d4be64b5\">992a1911<\/a>)<\/li>\n\n\n<li>Allow <code>processData: true<\/code> even for binary data (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/ce264e0789116e37fe371503537a217c038dfae8\">ce264e07<\/a>)<\/li>\n\n\n<li>Support binary data (including FormData) (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/a7ed9a7b6364273b1b964fd2cf9691dec2cbec6b\">a7ed9a7b<\/a>)<\/li>\n\n\n<li>Support <code>headers<\/code> for script transport even when cross-domain (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5142\">#5142<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/6d1364431b63b0d3bbe1c5fd604131f9db453396\">6d136443<\/a>)<\/li>\n\n\n<li>Support <code>null<\/code> as success functions in <code>jQuery.get<\/code> (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4989\">#4989<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/74978b7e892537559850cda7332bdab8106e6354\">74978b7e<\/a>)<\/li>\n\n\n<li>Don&#8217;t auto-execute scripts unless dataType provided (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4822\">#4822<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/025da4dd343e6734f3d3c1b4785b1548498115d8\">025da4dd<\/a>)<\/li>\n\n\n<li>Make responseJSON work for erroneous same-domain JSONP requests (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/68b4ec59c8f290d680e9db4bc980655660817dd1\">68b4ec59<\/a>)<\/li>\n\n\n<li>Execute JSONP error script responses (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4771\">#4771<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/a1e619b03a557b47c3e26a5e74af12b63a0d5e73\">a1e619b0<\/a>)<\/li>\n\n\n<li>Avoid CSP errors in the script transport for async requests (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/3969\">#3969<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/07a8e4a177550025c1a08d7ac754839733943f55\">07a8e4a1<\/a>)<\/li>\n\n\n<li>Drop the json to jsonp auto-promotion logic (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/1799\">#1799<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/3376\">#3376<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/e7b3bc488d01d584262e12a7c5c25f935d0d034b\">e7b3bc48<\/a>)<\/li>\n\n\n<li>Overwrite s.contentType with content-type header value, if any (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4119\">#4119<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/7fb90a6beaeffe16699800f73746748f6a5cc2de\">7fb90a6b<\/a>)<\/li>\n\n\n<li>Deprecate AJAX event aliases, inline event\/alias into deprecated (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/23d53928f383b0e7440bf4b08b7524e6af232fad\">23d53928<\/a>)<\/li>\n\n\n<li>Do not execute scripts for unsuccessful HTTP responses (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4250\">#4250<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/50871a5a85cc802421b40cc67e2830601968affe\">50871a5a<\/a>)<\/li>\n\n\n<li>Simplify jQuery.ajaxSettings.xhr (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/1967\">#1967<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/abdc89ac2e581392b800c0364e0f5f2b6a82cdc6\">abdc89ac<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Attributes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Make <code>.attr( name, false )<\/code> remove for all non-ARIA attrs (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5388\">#5388<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/063831b6378d518f9870ec5c4f1e7d5d16e04f36\">063831b6<\/a>)<\/li>\n\n\n<li>Shave off a couple of bytes (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/b40a4807b604efbde51faf075d11e25441af1990\">b40a4807<\/a>)<\/li>\n\n\n<li>Don&#8217;t stringify attributes in the setter (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4948\">#4948<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/4250b628783d7bfa92ec6c5550c6e4b22fab6034\">4250b628<\/a>)<\/li>\n\n\n<li>Drop the <code>toggleClass(boolean|undefined)<\/code> signature (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/3388\">#3388<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/a4421101fd6d9d7b0550210f8e8690641733dd9a\">a4421101<\/a>)<\/li>\n\n\n<li>Refactor val(): don&#8217;t strip carriage return, isolate IE workarounds (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/ff2819911da6cbbed5ee42c35d695240f06e65e3\">ff281991<\/a>)<\/li>\n\n\n<li>Don&#8217;t set the type attr hook at all outside of IE (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/9e66fe9acf0ef27681f5a21149fc61678f791641\">9e66fe9a<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">CSS<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Fix dimensions of table <code>&lt;col&gt;<\/code> elements (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5628\">#5628<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/eca2a56457e1c40c071aeb3ac87efeb8bbb8013e\">eca2a564<\/a>)<\/li>\n\n\n<li>Drop the cache in finalPropName (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/640d5825df5ff223560c5690f1a268681c32f9fa\">640d5825<\/a>)<\/li>\n\n\n<li>Tests: Fix tests &#038; support tests under CSS Zoom (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5489\">#5489<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/071f6dba6bd1d8db3f36ce4694aab5ff437b9e36\">071f6dba<\/a>)<\/li>\n\n\n<li>Fix reliableTrDimensions support test for initially hidden iframes (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/b1e66a5faaf46ffcbcc27c79a9a224aaf851a987\">b1e66a5f<\/a>)<\/li>\n\n\n<li>Selector: Align with 3.x, remove the outer <code>selector.js<\/code> wrapper (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/53cf7244da2a2040333335c36e435b1c12efdff9\">53cf7244<\/a>)<\/li>\n\n\n<li>Make the reliableTrDimensions support test work with Bootstrap CSS (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5270\">#5270<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/65b85031fb5688361c077bc04e641e4b502671e1\">65b85031<\/a>)<\/li>\n\n\n<li>Make <code>offsetHeight( true )<\/code>, etc. include negative margins (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/3982\">#3982<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/bce13b72c1753e16cc0db53ebf0f0456bdcf6b48\">bce13b72<\/a>)<\/li>\n\n\n<li>Return <code>undefined<\/code> for whitespace-only CSS variable values (#5120) (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/7eb0019640a5856c42b451551eb7f995d913eba9\">7eb00196<\/a>)<\/li>\n\n\n<li>Don&#8217;t trim whitespace of undefined custom property (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5105\">#5105<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/ed306c0261ab63746040e5d58bb4477c3069a427\">ed306c02<\/a>)<\/li>\n\n\n<li>Skip falsy values in <code>addClass( array )<\/code>, compress code (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4998\">#4998<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/a338b407f2479f82df40635055effc163835183f\">a338b407<\/a>)<\/li>\n\n\n<li>Justify use of rtrim on CSS property values (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/655c0ed5e204b1f6427e09d615a49586a7bc84eb\">655c0ed5<\/a>)<\/li>\n\n\n<li>Trim whitespace surrounding CSS Custom Properties values (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4926\">#4926<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/efadfe991a5c287af561a9326bf1427d726c91c1\">efadfe99<\/a>)<\/li>\n\n\n<li>Include <code>show<\/code>, <code>hide<\/code> &#038; <code>toggle<\/code> methods in the jQuery slim build (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/297d18dd13f7b810ea5a4afeefa4cb15d9e16e16\">297d18dd<\/a>)<\/li>\n\n\n<li>Remove the opacity CSS hook (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/865469f5e60f55feb28469bb0a7526dd22f04b4e\">865469f5<\/a>)<\/li>\n\n\n<li>Workaround buggy getComputedStyle on table rows in IE\/Edge (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4490\">#4490<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/26415e081b318dbe1d46d2b7c30e05f14c339b75\">26415e08<\/a>)<\/li>\n\n\n<li>Don&#8217;t automatically add &#8220;px&#8221; to properties with a few exceptions (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/2795\">#2795<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/00a9c2e5f4c855382435cec6b3908eb9bd5a53b7\">00a9c2e5<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Core<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Remove obsolete workarounds, update support comments (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/e2fe97b7f15cf5ee2e44566b381f7bf214e491b1\">e2fe97b7<\/a>)<\/li>\n\n\n<li>Switch <code>$.parseHTML<\/code> from <code>document.implementation<\/code> to <code>DOMParser<\/code> (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/0e123509d529456ddf130abb97e6266b53f62c50\">0e123509<\/a>)<\/li>\n\n\n<li>Fix the exports setup to make bundlers work with ESM &#038; CommonJS (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5416\">#5416<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/60f11b58bfeece6b6d0189d7d19b61a4e1e61139\">60f11b58<\/a>)<\/li>\n\n\n<li>Add more info about named exports (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/5f869590924b7dea6a16d176b18700939f4b5290\">5f869590<\/a>)<\/li>\n\n\n<li>Simplify code post browser support reduction (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/93ca49e6d1ac23fee33b3bc3b7f4d93dd1a25cb7\">93ca49e6<\/a>)<\/li>\n\n\n<li>Move the factory to separate exports (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/46f6e3da796ee9d28c7c1428793b72d66bcbb0b7\">46f6e3da<\/a>)<\/li>\n\n\n<li>Use named exports in <code>src\/<\/code> (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5262\">#5262<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/f75daab09102a4dd5107deadb55d4a169f86254a\">f75daab0<\/a>)<\/li>\n\n\n<li>Fix regression in jQuery.text() on HTMLDocument objects (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5264\">#5264<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/a75d6b52fad212820358e8ada3154f2f634e699b\">a75d6b52<\/a>)<\/li>\n\n\n<li>Selector: Move jQuery.contains from the selector to the core module (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/024d87195ac46690023e2b0b308d4406a8a5a27e\">024d8719<\/a>)<\/li>\n\n\n<li>Drop the root parameter of jQuery.fn.init (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/d2436df36a4b2ef556907e734a90771f0dbdbcaf\">d2436df3<\/a>)<\/li>\n\n\n<li>Don&#8217;t rely on splice being present on input (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/9c6f64c7b51d50e334ef1183e2937ad77c0a68b0\">9c6f64c7<\/a>)<\/li>\n\n\n<li>Manipulation: Add basic TrustedHTML support (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4409\">#4409<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/de5398a6ad088dc006b46c6a870a2a053f4cd663\">de5398a6<\/a>)<\/li>\n\n\n<li>Report browser errors in parseXML (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4784\">#4784<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/8969732518470a7f8e654d5bc5be0b0076cb0b87\">89697325<\/a>)<\/li>\n\n\n<li>Make jQuery.isXMLDoc accept falsy input (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4782\">#4782<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/fd421097c56696e4c1c4a99c1aae44c59a722be4\">fd421097<\/a>)<\/li>\n\n\n<li>Drop support for Edge Legacy (i.e. non-Chromium Microsoft Edge) (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4568\">#4568<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/e35fb62db4fb46f031056bb53e393982c03972a1\">e35fb62d<\/a>)<\/li>\n\n\n<li>Fire iframe script in its context, add doc param in globalEval (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4518\">#4518<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/4592595b478be979141ce35c693dbc6b65647173\">4592595b<\/a>)<\/li>\n\n\n<li>Exclude callbacks &#038; deferred modules in the slim build as well (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/fbc44f52fe76e1b601da76a1d7f8ef27884c06da\">fbc44f52<\/a>)<\/li>\n\n\n<li>Migrate from AMD to ES modules \ud83c\udf89 (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/d0ce00cdfa680f1f0c38460bc51ea14079ae8b07\">d0ce00cd<\/a>)<\/li>\n\n\n<li>Use Array.prototype.flat where supported (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4320\">#4320<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/9df4f1de12728b44a4b0f91748f12421008d9079\">9df4f1de<\/a>)<\/li>\n\n\n<li>Remove private copies of push, sort &#038; splice from the jQuery prototype (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/b59107f5d7451ac16a7c8755128719be6ec8bf12\">b59107f5<\/a>)<\/li>\n\n\n<li>Implement .even() &#038; .odd() to replace POS :even &#038; :odd (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/78420d427cf3734d9264405fcbe08b76be182a95\">78420d42<\/a>)<\/li>\n\n\n<li>Deprecate jQuery.trim (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4363\">#4363<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/5ea5946094784f68437ef26d463dfcfbbbaff1f6\">5ea59460<\/a>)<\/li>\n\n\n<li>Remove IE-specific support tests, rely on document.documentMode (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4386\">#4386<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/3527a3840585e6a359cd712591c9c57398357b9b\">3527a384<\/a>)<\/li>\n\n\n<li>Drop support for IE <11, iOS <11, Firefox <65, Android Browser &#038; PhantomJS (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/3950\">#3950<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4299\">#4299<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/cf84696fd1d7fe314a11492606529b5a658ee9e3\">cf84696f<\/a>)<\/li>\n\n\n<li>Remove deprecated jQuery APIs (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4056\">#4056<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/58f0c00bed695f934bb205c6115e5fe99dd5c27b\">58f0c00b<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Data<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Refactor to reduce size (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/805cdb43fd02c3a5783c06b5ec2c9519be0682ab\">805cdb43<\/a>)<\/li>\n\n\n<li>Event:Manipulation: Prevent collisions with Object.prototype (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/3256\">#3256<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/9d76c0b163675505d1a901e5fe5249a2c55609bc\">9d76c0b1<\/a>)<\/li>\n\n\n<li>Separate data &#038; css\/effects camelCase implementations (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/3355\">#3355<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/8fae21200e80647fec4389995c4879948d11ad66\">8fae2120<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Deferred<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Rename <code>getStackHook<\/code> to <code>getErrorHook<\/code> (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5201\">#5201<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/258ca1ec6a373f85f7849308c967b7e6a993e6e7\">258ca1ec<\/a>)<\/li>\n\n\n<li>Respect source maps in jQuery.Deferred.exceptionHook (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/3179\">#3179<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/0b9c5037f707a0b8e0dbb11776b690ae7dde7123\">0b9c5037<\/a>)<\/li>\n\n\n<li>Rename master to primary (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/a32cf6324f8f2190e66a687e94be9687ebf840b7\">a32cf632<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Deprecated<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Define <code>.hover()<\/code> using non-deprecated methods (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/fd6ffc5eb2c12562f2656d2f33865448420252be\">fd6ffc5e<\/a>)<\/li>\n\n\n<li>Remove jQuery.trim (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/0b676ae12d20721e2df6f6f32f37f7302f8805bf\">0b676ae1<\/a>)<\/li>\n\n\n<li>Fix AMD parameter order (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/f810080e8e92278bb5288cba7cc0169481471780\">f810080e<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Dimensions<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Add offset prop fallback to FF for unreliable TR dimensions (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4529\">#4529<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/3bbbc11111840d6fd5160db13f2c1a9acb05c4c4\">3bbbc111<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Docs<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Fix some minor issues in comments (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/e4d4dd81bfb0c27a9c557746035738319253a30c\">e4d4dd81<\/a>)<\/li>\n\n\n<li>update herodevs link in README (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5695\">#5695<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/093e63f92a5843c2d73fd953454cc6307fe8025c\">093e63f9<\/a>)<\/li>\n\n\n<li>Align CONTRIBUTING.md with <code>3.x-stable<\/code> (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/d92810614b53270a8f014db14022887ee3383fd5\">d9281061<\/a>)<\/li>\n\n\n<li>Update CONTRIBUTING.md (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/4ef25b0de4a847f14ba2f88e309eaf759e035d78\">4ef25b0d<\/a>)<\/li>\n\n\n<li>add version support section to README (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/cbc2bc1fd37bb6af5d2c60cf666265c4d438200f\">cbc2bc1f<\/a>)<\/li>\n\n\n<li>Update remaining HTTP URLs to HTTPS (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/7cdd8374234b77a3c70dd511a1b06066afb146bb\">7cdd8374<\/a>)<\/li>\n\n\n<li>Fix module links in the package README (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/ace646f6e83e653f666ba715c200739f1cbdba52\">ace646f6<\/a>)<\/li>\n\n\n<li>update watch task in CONTRIBUTING.md (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/77d6ad7172db3ae11573df7b322d410b161eb43e\">77d6ad71<\/a>)<\/li>\n\n\n<li>Fix typos found by codespell (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/620870a1af5287d29c77ec6d5f973116b23793a7\">620870a1<\/a>)<\/li>\n\n\n<li>remove stale gitter badge from readme (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/67cb1af7740a956e150e8d93266c4e601f55e8a4\">67cb1af7<\/a>)<\/li>\n\n\n<li>Remove the &#8220;Grunt build&#8221; section from the PR template (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/988a56847de301ce18a653f84b07c5af432a269f\">988a5684<\/a>)<\/li>\n\n\n<li>Remove stale badge from README (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/bcd9c2bc3ddaa04f89f550681ca9c1ec5efc4328\">bcd9c2bc<\/a>)<\/li>\n\n\n<li>Update the README of the published package (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/edccabf10d37b57cbd4eeebc44f3acb67cb2739c\">edccabf1<\/a>)<\/li>\n\n\n<li>Remove git.io from a GitHub Actions comment (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/016872ffe03ab9107b1bc62fae674a4809c3b23f\">016872ff<\/a>)<\/li>\n\n\n<li>Update webpack website in README (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/01819bc3bcc44282e5bb9301c3478d837d1e5152\">01819bc3<\/a>)<\/li>\n\n\n<li>add link to patchwelcome and help wanted issues (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/924b7ce825962bfe4c16e02eb411c7f66ee75a55\">924b7ce8<\/a>)<\/li>\n\n\n<li>add link to preview the new CLAs (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/683ceb8ff067ac53a7cb464ba1ec3f88e353e3f5\">683ceb8f<\/a>)<\/li>\n\n\n<li>Fix incorrect <code>trac-NUMBER<\/code> references (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/eb9ceb2facbeff1c66a41824bd0ac0c56d0c5c62\">eb9ceb2f<\/a>)<\/li>\n\n\n<li>remove expired links from old jquery source (#4997) (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/ed066ac70270b4bb20b5717501d2d268ef144bd3\">ed066ac7<\/a>)<\/li>\n\n\n<li>Remove links to Web Archive from source (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4981\">#4981<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/e24f2dcf3f6bda1a672502e0233c732065cbbe89\">e24f2dcf<\/a>)<\/li>\n\n\n<li>Replace <code>#NUMBER<\/code> Trac issue references with <code>trac-NUMBER<\/code> (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/5d5ea015114092c157311c4948f7cc3d8c8e7f8a\">5d5ea015<\/a>)<\/li>\n\n\n<li>Update the URL to the latest jQuery build in CONTRIBUTING.md (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/9bdb16cd19097da67950a707baac3980bda873f3\">9bdb16cd<\/a>)<\/li>\n\n\n<li>Remove the CLA checkbox in the pull request template (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/e124893132d7a979d7987f978e968a1f889348b6\">e1248931<\/a>)<\/li>\n\n\n<li>update irc to Libera and fix LAMP dead link (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/175db73ec7938e774d9e93d3afdfb35a24466b47\">175db73e<\/a>)<\/li>\n\n\n<li>Update Frequently Reported Issues in the GitHub issue template (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/7a6fae6a7e51ae30a9f3177e8639fbf523ed0915\">7a6fae6a<\/a>)<\/li>\n\n\n<li>Change JS Foundation mentions to OpenJS Foundation (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/11611967adf2bd9ff4304132f917629ec1134049\">11611967<\/a>)<\/li>\n\n\n<li>add SECURITY.md, show security email address (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/2ffe54ca53b4ba2de2012f83c3faf262c1003af9\">2ffe54ca<\/a>)<\/li>\n\n\n<li>Fix typos (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/1a7332ce83cdee7d6cd9d45c2a4b83067f53f14b\">1a7332ce<\/a>)<\/li>\n\n\n<li>Update the link to the jsdom repository (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/a62309e01b3c76d2b73560ca666c454b7bbfcb77\">a62309e0<\/a>)<\/li>\n\n\n<li>Use https for hyperlinks in README (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/73415da25d964ee31ec1804d55f5af0199a1378e\">73415da2<\/a>)<\/li>\n\n\n<li>Remove a mention of the event\/alias.js module from README (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/3edfa1bcdc50bca41ac58b2642b12f3feee03a3b\">3edfa1bc<\/a>)<\/li>\n\n\n<li>Update links to EdgeHTML issues to go through Web Archive (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/1dad1185e0b2ca2a13bf411558eda75fb2d4da88\">1dad1185<\/a>)<\/li>\n\n\n<li>direct users to GitHub docs for cloning the repo (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/f1c16de29689d2cfaf629f00d682148e99753509\">f1c16de2<\/a>)<\/li>\n\n\n<li>Change OS X to macOS in README (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/5a3e0664d261422f11a78faaf101d70c73b3a5a8\">5a3e0664<\/a>)<\/li>\n\n\n<li>Update most URLs to HTTPS (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/f09d92100ffff6208211b200ed0cdc39bfd17fc3\">f09d9210<\/a>)<\/li>\n\n\n<li>Convert link to Homebrew from HTTP to HTTPS (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/e0022f23144fd1dc6db86a5d8c18af47bc14f0f3\">e0022f23<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Effect \/ Effects<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Fix a unnecessary conditional statement in .stop() (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4374\">#4374<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/110802c7f22b677ef658963aa95ebdf5cb9c5573\">110802c7<\/a>)<\/li>\n\n\n<li>Remove jQuery.fx.interval (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/6c2c7362fb18d3df7c2a7b13715c2763645acfcb\">6c2c7362<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Event<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Use <code>.preventDefault()<\/code> in beforeunload (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/7c123dec4b96e7c3ce5f5a78e828c8aa335bea98\">7c123dec<\/a>)<\/li>\n\n\n<li>Increase robustness of an inner native event in leverageNative (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5459\">#5459<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/527fb3dcf0dcde69302a741dfc61cbfa58e99eb0\">527fb3dc<\/a>)<\/li>\n\n\n<li>Avoid collisions between jQuery.event.special &#038; Object.prototype (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/bcaeb000b777c018ad5d18e01be5060caa8cb158\">bcaeb000<\/a>)<\/li>\n\n\n<li>Simplify the check for saved data in leverageNative (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/dfe212d5a1eed6b4a67d1cbd04ece09bbac33699\">dfe212d5<\/a>)<\/li>\n\n\n<li>Make trigger(focus\/blur\/click) work with native handlers (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5015\">#5015<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/6ad3651dbfea9e9bb56e608f72b4ef2f97bd4e70\">6ad3651d<\/a>)<\/li>\n\n\n<li>Simulate focus\/blur in IE via focusin\/focusout (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4856\">#4856<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4859\">#4859<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4950\">#4950<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/ce60d31893deab7d3da592b5173e90b5d50e7732\">ce60d318<\/a>)<\/li>\n\n\n<li>Don&#8217;t break focus triggering after <code>.on(focus).off(focus)<\/code> (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4867\">#4867<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/e539bac79e666bba95bba86d690b4e609dca2286\">e539bac7<\/a>)<\/li>\n\n\n<li>Make focus re-triggering not focus the original element back (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4382\">#4382<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/dbcffb396c2db61ff96edc4162602e850797d61f\">dbcffb39<\/a>)<\/li>\n\n\n<li>Don&#8217;t crash if an element is removed on blur (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4417\">#4417<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/5c2d08704e289dd2745bcb0557b35a9c0e6af4a4\">5c2d0870<\/a>)<\/li>\n\n\n<li>Remove the event.which shim (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/3235\">#3235<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/1a5fff4c169dbaa2df72c656868bcf60ed4413d0\">1a5fff4c<\/a>)<\/li>\n\n\n<li>remove jQuery.event.global (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/18db87172cffbe48b92e30b70249e304863a70f9\">18db8717<\/a>)<\/li>\n\n\n<li>Only attach events to objects that accept data &#8212; for real (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4397\">#4397<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/d5c505e35d8c74ce8e9d99731a1a7eab0e0d911c\">d5c505e3<\/a>)<\/li>\n\n\n<li>Stop shimming focusin &#038; focusout events (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4300\">#4300<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/8a741376937dfacf9f82b2b88f93b239fe267435\">8a741376<\/a>)<\/li>\n\n\n<li>Prevent leverageNative from registering duplicate dummy handlers (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/eb6c0a7c97b1b3cf00144de12d945c9c569f935c\">eb6c0a7c<\/a>)<\/li>\n\n\n<li>Fix handling of multiple async focus events (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4350\">#4350<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/ddfa83766478268391bc9da96683fc0d4973fcfe\">ddfa8376<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Manipulation<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Make jQuery.cleanData not skip elements during cleanup (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5214\">#5214<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/3cad5c435aa2333c39baa55a8bceb2b6bf1e2721\">3cad5c43<\/a>)<\/li>\n\n\n<li>Generalize a test to support IE (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/88690ebfc8b5ef8b1e444326c664b590ecc0b888\">88690ebf<\/a>)<\/li>\n\n\n<li>Support $el.html(selfRemovingScript) (#5378) (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5377\">#5377<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/937923d9ee8dfd19008447b5059cbd13ee5a23ac\">937923d9<\/a>)<\/li>\n\n\n<li>Extract domManip to a separate file (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/ee6e874075ba1fcd8f9e62cd1ee5c04f6518b6d6\">ee6e8740<\/a>)<\/li>\n\n\n<li>Don&#8217;t remove HTML comments from scripts (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4904\">#4904<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/2f8f39e457c32c454c50545b0fdaa1d7a4a2f8bd\">2f8f39e4<\/a>)<\/li>\n\n\n<li>Respect script crossorigin attribute in DOM manipulation (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4542\">#4542<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/15ae361485056b236a9484a185238f992806e1ff\">15ae3614<\/a>)<\/li>\n\n\n<li>Avoid concatenating strings in buildFragment (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/9c98e4e86eda857ee063bc48adbc1a11bb5506ee\">9c98e4e8<\/a>)<\/li>\n\n\n<li>Make jQuery.htmlPrefilter an identity function (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/90fed4b453a5becdb7f173d9e3c1492390a1441f\">90fed4b4<\/a>)<\/li>\n\n\n<li>Selector: Use the nodeName util where possible to save size (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/4504fc3d722dd029d861cb47aa65a5edc651c4d3\">4504fc3d<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Offset<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Increase search depth when finding the &#8216;real&#8217; offset parent (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/556eaf4a193287c306d163635cbb5f5c95a22a84\">556eaf4a<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Release<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>4.0.0 (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/4f2fae08f23b54ce09322e62e73cce6161b8d3cb\">4f2fae08<\/a>)<\/li>\n\n\n<li>remove dist files from main branch (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/c838cfb5bb0c6cd17cfaa1dd83aca8d20589de99\">c838cfb5<\/a>)<\/li>\n\n\n<li>4.0.0-rc.2 (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/97525193735ed32c332f0dbaf2f782df8b1b949b\">97525193<\/a>)<\/li>\n\n\n<li>Update AUTHORS.txt (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/c128d5d8a8fd9e9b3dcd3efa493e71f6a1649bd8\">c128d5d8<\/a>)<\/li>\n\n\n<li>Fix release issues uncovered during the 4.0.0-rc.1 release (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/a5b0c4318df748e5a0fe27d23820c60029d26b90\">a5b0c431<\/a>)<\/li>\n\n\n<li>remove dist files from main branch (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/9d06c6dd6f84bb0ae49e7c7445282ebb93b7b226\">9d06c6dd<\/a>)<\/li>\n\n\n<li>4.0.0-rc.1 (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/586182f35e818c318046dac1cbaa31ee7a07ee21\">586182f3<\/a>)<\/li>\n\n\n<li>Run <code>npm publish<\/code> in the post-release phase (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/ff1f0eaafd0dbcd4c063c3c557d9cee0a461f89d\">ff1f0eaa<\/a>)<\/li>\n\n\n<li>Only run browserless tests during the release (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/fb5ab0f546e0e25ccb5feb3d51ca2ea743b06efc\">fb5ab0f5<\/a>)<\/li>\n\n\n<li>Temporarily disable running tests on release (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/3f79644b72e928c529febc1aaee081a6c4b96be3\">3f79644b<\/a>)<\/li>\n\n\n<li>publish tmp\/release\/dist folder when releasing (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5658\">#5658<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/a865212dea22d44bf2bea3e2c618c4a25c63c6a6\">a865212d<\/a>)<\/li>\n\n\n<li>correct build date in verification; other improvements (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/53ad94f319930a5bf8cb9bd935ebd4e028741903\">53ad94f3<\/a>)<\/li>\n\n\n<li>remove dist files from main branch (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/be048a027d0581746f71df7c8eb3ce1d9bd10a40\">be048a02<\/a>)<\/li>\n\n\n<li>4.0.0-beta.2 (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/51fffe9f7395f86fb24c59115c9b98855c39fc07\">51fffe9f<\/a>)<\/li>\n\n\n<li>ensure builds have the proper version (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/3e612aeeb3821c657989e67b43c9b715f5cd32e2\">3e612aee<\/a>)<\/li>\n\n\n<li>set preReleaseBase in config file (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/1fa8df5dbd5d84cf55882a38eb6e571abd0aa938\">1fa8df5d<\/a>)<\/li>\n\n\n<li>fix running pre\/post release scripts in windows (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/5518b2da1816b379b573abc55ba92f02776a3486\">5518b2da<\/a>)<\/li>\n\n\n<li>update AUTHORS.txt (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/862e7a1882f3f737db7dde1b5ecda9766d61694a\">862e7a18<\/a>)<\/li>\n\n\n<li>migrate release process to release-it (<a href=\"https:\/\/github.com\/jquery\/jquery-release\/issues\/114\">jquery\/jquery-release#114<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/2646a8b07fcc2cf7cf384724f622eb0c27f9166c\">2646a8b0<\/a>)<\/li>\n\n\n<li>add factory files to release distribution (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5411\">#5411<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/1a324b0792ba8d032b89dd8bf78bbf5caa535367\">1a324b07<\/a>)<\/li>\n\n\n<li>use buildDefaultFiles directly and pass version (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/b507c8648f701acd1c48b3c38054ad38d76fd1ca\">b507c864<\/a>)<\/li>\n\n\n<li>copy dist-module folder as well (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/63767650b5b171b4671304fd2bb2f2890431929f\">63767650<\/a>)<\/li>\n\n\n<li>only published versioned files to cdn (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/3a0ca684eb21d64a13d7591ce1891b1990e0339c\">3a0ca684<\/a>)<\/li>\n\n\n<li>remove scripts and dev deps from dist package.json (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/7eac932da7177104546abef595adf4429eb829b3\">7eac932d<\/a>)<\/li>\n\n\n<li>update build command in Release.generateArtifacts (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/3b963a21662061e0f39ad90f146e73e2223c2b86\">3b963a21<\/a>)<\/li>\n\n\n<li>add support for md5 sums in windows (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/f088c36631df3d5dc98408debd147ea5d3618557\">f088c366<\/a>)<\/li>\n\n\n<li>remove the need to install grunt globally (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/b2bbaa36d4d37bd48f954ed3cdbd50d3461a523d\">b2bbaa36<\/a>)<\/li>\n\n\n<li>upgrade release dependencies (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/967af73203378db0cc3637adee85c442e246e05a\">967af732<\/a>)<\/li>\n\n\n<li>Remove an unused chalk dependency (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/bfb6897c558dfdccff7ac5fc377b08e806525be3\">bfb6897c<\/a>)<\/li>\n\n\n<li>Use an in-repository dist README fixture (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/358b769a00c3a09a8ec621b8dcb2d5e31b7da69a\">358b769a<\/a>)<\/li>\n\n\n<li>Update AUTHORS.txt (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/1b74660f730d34bf728094c33080ff406427f41e\">1b74660f<\/a>)<\/li>\n\n\n<li>update AUTHORS.txt (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/cf9fe0f6a104a0f527c7c3f441485c19e2b19c69\">cf9fe0f6<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Selector<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Remove the workaround for <code>:has<\/code>; test both on iPhone &#038; iPad (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/65e35450c9954173dc1ddd3576242a913d8efb88\">65e35450<\/a>)<\/li>\n\n\n<li>Properly deprecate <code>jQuery.expr[ &quot;:&quot; ]<\/code>\/<code>jQuery.expr.filters<\/code> (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/329661fd538a07993a2fcfa2a75fdd7f5667f86c\">329661fd<\/a>)<\/li>\n\n\n<li>Make <code>selector.js<\/code> module depend on <code>attributes\/attr.js<\/code> (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5379\">#5379<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/e06ff08849057cd099365bf43598c8952fe9956d\">e06ff088<\/a>)<\/li>\n\n\n<li>Eliminate <code>selector.js<\/code> depenencies from various modules (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/e8b7db4b0f1e1b8e08578641b30a92b955ccc4ec\">e8b7db4b<\/a>)<\/li>\n\n\n<li>Re-expose jQuery.find.{tokenize,select,compile,setDocument} (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5259\">#5259<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/338de3599039a3ba906214e656bcbe637430c37d\">338de359<\/a>)<\/li>\n\n\n<li>Stop relying on CSS.supports( &#8220;selector(&#8230;)&#8221; ) (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5194\">#5194<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/68aa2ef7571e2d9f91fad1aa9e5f956c04dc9ee9\">68aa2ef7<\/a>)<\/li>\n\n\n<li>Backport jQuery selection context logic to selector-native (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5185\">#5185<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/2e644e845051703775b35b358eec5d3608a9465f\">2e644e84<\/a>)<\/li>\n\n\n<li>Make selector lists work with <code>qSA<\/code> again (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5177\">#5177<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/09d988b774e7ff4acfb69c0cde2dab373559aaca\">09d988b7<\/a>)<\/li>\n\n\n<li>Implement the <code>uniqueSort<\/code> chainable method (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5166\">#5166<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/5266f23cf49c9329bddce4d4af6cb5fbbd1e0383\">5266f23c<\/a>)<\/li>\n\n\n<li>Re-introduce selector-native.js (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/4c1171f2ed62584211250df0af8302d34c04621a\">4c1171f2<\/a>)<\/li>\n\n\n<li>Manipulation: Fix DOM manip within template contents (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5147\">#5147<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/3299236c898136dc1aa57dc5148811203e931895\">3299236c<\/a>)<\/li>\n\n\n<li>Drop support for legacy pseudos, test custom pseudos (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/8c7da22caeae8c2c3f7e9869d5f47414669f106c\">8c7da22c<\/a>)<\/li>\n\n\n<li>Use jQuery <code>:has<\/code> if <code>CSS.supports(selector(...))<\/code> non-compliant (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/5098\">#5098<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/d153c375e67f2c2dba82c2fb079c36b8d795e66a\">d153c375<\/a>)<\/li>\n\n\n<li>Remove the &#8220;a:enabled&#8221; workaround for Chrome <=77 (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/c1ee33aded44051b8f1288b59d2efdc68d0413cc\">c1ee33ad<\/a>)<\/li>\n\n\n<li>Make empty attribute selectors work in IE again (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4435\">#4435<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/05184cc448f4ed7715ddd6a5d724e167882415f1\">05184cc4<\/a>)<\/li>\n\n\n<li>Use shallow document comparisons in uniqueSort (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4441\">#4441<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/15750b0af270da07917b70457cf09bda97d3d935\">15750b0a<\/a>)<\/li>\n\n\n<li>Add a test for throwing on post-comma invalid selectors (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/6eee5f7f181f9ebf5aa428e96356667e3cf7ddbd\">6eee5f7f<\/a>)<\/li>\n\n\n<li>Make selectors with leading combinators use qSA again (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/ed66d5a22b37425abf5b63c361f91340de89c994\">ed66d5a2<\/a>)<\/li>\n\n\n<li>Use shallow document comparisons to avoid IE\/Edge crashes (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4441\">#4441<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/aa6344baf87145ffc807a527d9c1fb03c96b1948\">aa6344ba<\/a>)<\/li>\n\n\n<li>reduce size, simplify setDocument (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/29a9544a4fb743491a42f827a6cf8627b7b99e0f\">29a9544a<\/a>)<\/li>\n\n\n<li>Leverage the :scope pseudo-class where possible (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4453\">#4453<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/df6a7f7f0f615149266b1a51064293b748b29900\">df6a7f7f<\/a>)<\/li>\n\n\n<li>Bring back querySelectorAll shortcut usage (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/cef4b73179b8d2a38cfd5e0730111cc80518311a\">cef4b731<\/a>)<\/li>\n\n\n<li>Inline Sizzle into the selector module (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/47835965bd100a3661d8299d8b769ceeb8b6ce48\">47835965<\/a>)<\/li>\n\n\n<li>Port Sizzle tests to jQuery (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/79b74e043a4ee737d44a95094ff1184e40bd5b16\">79b74e04<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Support<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>ensure display is set to block for the support div (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4832\">#4832<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/09f254361f1fe8a563b8a90fe6a4d269f4b11514\">09f25436<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Traversing<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Fix <code>contents()<\/code> on <code>&lt;object&gt;<\/code>s with children in IE (<a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/ccbd6b93424cbdbf86f07a86c2e55cbab497d7a3\">ccbd6b93<\/a>)<\/li>\n\n\n<li>Fix <code>contents()<\/code> on <code>&lt;object&gt;<\/code>s with children (<a href=\"https:\/\/github.com\/jquery\/jquery\/issues\/4384\">#4384<\/a>, <a href=\"https:\/\/github.com\/jquery\/jquery\/commit\/4d865d96aa5aae91823c50020b5c19da79566811\">4d865d96<\/a>)<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">20-vuotisreunion ja julkaisukuva<\/h2>\n\n\n\n<p>Moni jQueryn kehitt\u00e4j\u00e4 ja kontribuuttori tapasi 20-vuotisreunion merkeiss\u00e4 Dallasissa, ja John Resig oli mukana Zoomin kautta. Julkaisupostaus tehtiin samalla kun porukka oli koolla.<\/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\/15\/2026\/01\/jquery-reunion-group-edited.jpeg\" alt=\"jQueryn 20-vuotisreunionin ryhm\u00e4kuva (Dallas)\" class=\"wp-image-150\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/jquery-reunion-group-edited.jpeg 1804w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/jquery-reunion-group-edited-300x226.jpeg 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/jquery-reunion-group-edited-1024x771.jpeg 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/jquery-reunion-group-edited-768x579.jpeg 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/jquery-reunion-group-edited-1536x1157.jpeg 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/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\">Yhteenveto: milloin p\u00e4ivitt\u00e4\u00e4 ja mit\u00e4 testata ensin?<\/h2>\n\n\n\n<p>Jos olet jQuery 3.x -maailmassa ja tuet moderneja selaimia, 4.0.0 tuo j\u00e4rkev\u00e4\u00e4 siivousta: ESM-yhteensopivuus, parempi CSP\/Trusted Types -tarina, pienempi footprint ja vanhojen apu-API:jen poistuminen pakottaa kohti natiiveja ratkaisuja.<\/p>\n\n\n\n<p>K\u00e4yt\u00e4nn\u00f6ss\u00e4 ensimm\u00e4iset regressioriskit osuvat yleens\u00e4 kolmeen paikkaan: (1) poistettuihin <code>jQuery.*<\/code> apureihin, (2) fokus-eventtien j\u00e4rjestykseen sek\u00e4 (3) ymp\u00e4rist\u00f6ihin, joissa CSP on tiukka tai Trusted Types on k\u00e4yt\u00f6ss\u00e4. N\u00e4iden ymp\u00e4rille kannattaa rakentaa smoke-testit ennen kuin vaihtaa CDN-linkit tuotannossa.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Viitteet \/ L\u00e4hteet<\/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:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/TrustedHTML\" target=\"_blank\" rel=\"noopener noreferrer\">TrustedHTML &#8211; MDN Web Docs<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>jQuery 4.0.0 on ensimm\u00e4inen iso major-julkaisu l\u00e4hes kymmeneen vuoteen. Se modernisoi kirjastoa reippaasti \u2013 ja samalla siivoaa pois vuosien aikana kertynytt\u00e4 legacy\u00e4, mik\u00e4 n\u00e4kyy my\u00f6s rikkomina muutoksina.<\/p>\n","protected":false},"author":57,"featured_media":149,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[93],"tags":[96,97,98,95,94],"class_list":["post-151","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ohjelmointikielet","tag-csp","tag-es-modules","tag-frontend","tag-javascript","tag-jquery"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/posts\/151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/users\/57"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/comments?post=151"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/posts\/151\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/media\/149"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/media?parent=151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/categories?post=151"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/tags?post=151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}