jQuery 4.0.0 ist da: Was sich für moderne Webprojekte wirklich ändert
Am 14. Januar 2006 hat John Resig jQuery auf der BarCamp in New York City vorgestellt. Exakt 20 Jahre später markiert jQuery 4.0.0 nun einen seltenen, aber wichtigen Schnitt: Das Team veröffentlicht die finale Version nach einem langen Entwicklungszyklus inklusive mehrerer Pre-Releases. Es ist das erste Major-Release seit fast zehn Jahren – und entsprechend bringt es neben vielen Modernisierungen auch Breaking Changes mit.
Die gute Nachricht: Laut Ankündigung sollten die meisten Projekte mit nur kleinen Anpassungen migrieren können. Die weniger gute Nachricht: Einige Änderungen räumen bewusst Altlasten ab, die man in Patch- oder Minor-Releases nie sauber hätte entfernen können. Konkret wurden Legacy-Codepfade gekürzt, zuvor als deprecated markierte APIs entfernt, interne (nie dokumentierte) Parameter aus öffentlichen Funktionen gestrichen und „magische“ Sonderverhalten entfernt, die in der Praxis oft mehr Komplexität als Nutzen erzeugt haben.
Für den Umstieg stehen zwei zentrale Helfer bereit: der offizielle Upgrade-Guide unter https://jquery.com/upgrade-guide/4.0/ sowie ein frisches Release des jQuery-Migrate-Plugins: https://github.com/jquery/jquery-migrate/. Probleme oder Regressions sollen direkt im jQuery-Issue-Tracker landen: https://github.com/jquery/jquery/issues.
Distribution: CDN und npm (und warum Dritt-CDNs später sein können)
jQuery 4.0.0 ist wie üblich über das offizielle CDN sowie über npm verfügbar. Drittanbieter-CDNs werden die Dateien voraussichtlich zeitnah spiegeln – aber deren Release-Zeitpläne liegen nicht beim jQuery-Team, daher kann es ein paar Tage dauern.
Direkte CDN-Links (Full Build)
- https://code.jquery.com/jquery-4.0.0.js
- https://code.jquery.com/jquery-4.0.0.min.js
npm
npm install jquery@4.0.0Browser-Support: IE<11 ist raus, IE11 noch nicht
Eine der sichtbarsten Änderungen: jQuery 4.0 lässt den Support für Internet Explorer 10 und älter fallen. Viele hätten erwartet, dass damit auch IE11 verschwindet – das passiert aber explizit nicht in 4.0. Das Team will den Abbau in Stufen machen; der nächste Schritt ist laut Ankündigung für jQuery 5.0 vorgesehen (siehe PR: https://github.com/jquery/jquery/pull/5077). In 4.0 wird zunächst nur der Code entfernt, der speziell für IE-Versionen <11 existierte.
Zusätzlich wurden weitere sehr alte Browser aus dem Support-Bereich entfernt: Edge Legacy (nicht Chromium-basiert), iOS-Versionen älter als die letzten 3, Firefox-Versionen älter als die letzten 2 (ausgenommen Firefox ESR) sowie der Android Browser. Laut Release-Hinweis sollte dafür auf deiner Seite kein Code angepasst werden müssen – sofern du diese Browser ohnehin nicht mehr unterstützen musst. Wenn doch, ist jQuery 3.x weiterhin der richtige Stand.
Wenn du Alt-Browser wirklich brauchst
Wenn dein Projekt IE10/älter, Edge Legacy, sehr alte iOS-/Firefox-Versionen oder den Android Browser aktiv unterstützen muss, solltest du bei jQuery 3.x bleiben – jQuery 4.0 ist dafür nicht mehr gedacht.
Security-Modernisierung: Trusted Types und weniger CSP-Fallen
jQuery 4.0 adressiert ein Thema, das in vielen Enterprise- und WordPress-nahen Umgebungen längst Pflicht ist: Content Security Policy (CSP). Neu ist Support für Trusted Types (ein Sicherheitsmechanismus, der DOM-XSS erschweren soll). Konkret stellt jQuery sicher, dass HTML, das als TrustedHTML (MDN: https://developer.mozilla.org/en-US/docs/Web/API/TrustedHTML) vorliegt, als Input für Manipulationsmethoden genutzt werden kann, ohne gegen die CSP-Direktive require-trusted-types-for zu verstoßen.
Parallel dazu wurde das Verhalten bei asynchronen Script-Requests weiter in Richtung CSP-Kompatibilität geschoben: Wo früher teils Inline-Scripts bzw. XHR-basierte Ladevorgänge CSP-Probleme verursachen konnten, nutzt jQuery nun in den meisten Fällen <script>-Tags für asynchrone Script-Requests. Das reduziert CSP-Fehler, weil Inline-Script-Ausführung vermieden wird (siehe PR: https://github.com/jquery/jquery/pull/4763).
Es gibt aber weiterhin Sonderfälle, in denen XHR für asynchrone Script-Requests verwendet wird – etwa wenn die Option "headers" gesetzt wird. Der Release-Hinweis ist hier eindeutig: Stattdessen soll scriptAttrs genutzt werden. Grundsätzlich gilt: Wo möglich, wird jetzt ein <script>-Tag verwendet.
Build- und Tooling-Update: Quellcode ist auf ES Modules umgestellt
Ein strategisch wichtiger Schritt – gerade für moderne Build-Setups: Der jQuery-Source auf dem main-Branch wurde von AMD (Hintergrund: https://requirejs.org/docs/whyamd.html) auf ES Modules umgestellt (PR: https://github.com/jquery/jquery/pull/4541).
Das ist mehr als Kosmetik. Zwar wurde der Source schon lange über npm und GitHub veröffentlicht, aber ein direkter Import als Module war ohne RequireJS (jQuerys früheres Build-Tool: https://requirejs.org/) praktisch nicht möglich. Für das Packaging setzt jQuery jetzt auf Rollup (https://rollupjs.org/introduction/); außerdem laufen die Tests separat auch gegen die ES-Module. Damit wird jQuery deutlich kompatibler mit modernen Bundlern, Workflows und auch mit Browsern, die über <script type=module> arbeiten.
Breaking Changes, die in der Praxis relevant werden können
Ein Major-Release ohne schmerzhafte Ecken wäre ungewöhnlich. Bei jQuery 4.0 lohnt es sich vor allem, diese Punkte bewusst zu prüfen – sie sind typisch für Altcode in WordPress-Themes, Legacy-Backoffice-Anwendungen oder lange gewachsene jQuery-Plugins.
Deprecated APIs sind endgültig entfernt
Mehrere APIs waren schon seit einigen Versionen als deprecated markiert – in 4.0 sind sie nun weg. Die Begründung: Entweder waren sie immer als interne Helfer gedacht oder es gibt dafür in allen unterstützten Browsern mittlerweile saubere native Entsprechungen.
Entfernt wurden:
jQuery.isArrayjQuery.parseJSONjQuery.trimjQuery.typejQuery.nowjQuery.isNumericjQuery.isFunctionjQuery.isWindowjQuery.camelCasejQuery.nodeNamejQuery.cssNumberjQuery.cssPropsjQuery.fx.interval
Die Alternativen sind meist straightforward: Array.isArray(), JSON.parse(), String.prototype.trim() und Date.now() decken die typischen Fälle ab.
Spannend ist auch der Seiteneffekt: Zusammen mit dem Entfernen des alten IE-Support-Codes schrumpft jQuery 4.0 um über 3 KB (gzip).
Array-Methoden aus dem jQuery-Prototyp entfernt (push, sort, splice)
Der jQuery-Prototyp hatte lange Array-Methoden, die sich nicht wie normale jQuery-Methoden verhalten und immer nur intern gedacht waren: push, sort und splice. Diese sind nun aus dem Prototyp entfernt. Wenn du sie (bewusst oder unbewusst) auf jQuery-Collections verwendet hast, musst du umstellen.
Das Release nennt auch gleich das passende Muster:
// vorher (in jQuery 3.x evtl. genutzt)
// $elems.push(elem)
// nachher: Array-Methode direkt auf die jQuery-Collection anwenden
[].push.call($elems, elem);Focus/Blur-Event-Reihenfolge folgt jetzt der W3C-Spezifikation
Ein Klassiker: Die Reihenfolge von Focus- und Blur-Events war über Jahre hinweg browserübergreifend inkonsistent. jQuery hatte sich deshalb vor langer Zeit für eine einheitliche Reihenfolge entschieden und native Unterschiede überdeckt. Inzwischen sind die aktuellen Browser-Versionen (die jQuery 4.0 unterstützt) aber konvergiert – nur leider auf eine andere Reihenfolge als die, die jQuery historisch etabliert hatte. Das ist einer der Breaking Changes, die in UI-lastigen Anwendungen auffallen können.
Ab jQuery 4.0 wird das native Verhalten nicht mehr überschrieben. Damit folgt (in allen Browsern außer IE) die aktuelle W3C-Spezifikation:
- blur
- focusout
- focus
- focusin
Zum Vergleich: In früheren jQuery-Versionen war die Reihenfolge: focusout, blur, focusin, focus. Die Ironie laut Release: Der einzige Browser, der jemals der alten W3C-Spezifikation gefolgt ist (bevor sie 2023 aktualisiert wurde), war Internet Explorer.
Slim Build: jetzt ohne Deferreds und Callbacks (und deutlich kleiner)
Der Slim Build wird mit jQuery 4.0.0 nochmal kleiner: Deferreds und Callbacks sind entfernt, der Slim Build liegt laut Release bei rund 19,5 KB gzip. Hintergrund: Deferreds unterstützten schon lange den Promises/A+-Standard (https://promisesaplus.com/) – und in modernen Browsern sind native Promises ohnehin verfügbar.
Wichtig ist die Nuance: Deferreds haben zusätzliche Features, die native Promises nicht bieten. Trotzdem lässt sich der Großteil typischer Deferred-Nutzung auf Promise-Methoden migrieren.
Wenn du IE11 unterstützen musst, wird’s kniffliger: Native Promises sind dort nicht verfügbar. Empfehlung aus dem Release: Entweder den Main Build nutzen oder einen Promise-Polyfill ergänzen.
CDN-Links (Slim Build)
- https://code.jquery.com/jquery-4.0.0.slim.js
- https://code.jquery.com/jquery-4.0.0.slim.min.js
Der Slim Build ist weiterhin für die Fälle gedacht, in denen du z. B. kein Ajax brauchst oder bewusst eine dedizierte Ajax-Library einsetzen willst. Für Animationen reichen in vielen Projekten ohnehin CSS und Klassen-Manipulation, statt jQuery-Effekte. Zudem gibt es (außer IE11) in allen unterstützten Browsern native Promises, sodass Deferreds/Callbacks in vielen Setups verzichtbar werden.
Zur Einordnung: jQuery-Größe ist heute selten der limitierende Performance-Faktor – trotzdem spart der Slim Build laut Release etwa 8 KB gzip im Vergleich zur regulären Version.
Changelog-Highlights: was 4.0 unter der Haube bewegt
Neben den großen Themen (Browser-Support, CSP/Trusted Types, ESM) steckt viel Detailarbeit im Release. Der vollständige Vergleich ist hier verlinkt: Full changelog: 4.0.0. Ein paar Punkte, die bei Upgrades typischerweise relevant sind:
Ajax
- Array-Daten werden nicht mehr als binär behandelt (Commit: 992a1911)
processData: trueist auch für binäre Daten erlaubt (Commit: ce264e07)- Binärdaten inklusive FormData werden unterstützt (Commit: a7ed9a7b)
headerswird für Script-Transport unterstützt, auch cross-domain (Issue: #5142, Commit: 6d136443)nullals Success-Callback injQuery.getwird unterstützt (Issue: #4989, Commit: 74978b7e)- Scripts werden nicht mehr automatisch ausgeführt, wenn kein
dataTypegesetzt ist (Issue: #4822, Commit: 025da4dd) responseJSONfunktioniert auch bei fehlerhaften Same-Domain-JSONP-Requests (Commit: 68b4ec59)- JSONP-Fehler-Script-Responses werden ausgeführt (Issue: #4771, Commit: a1e619b0)
- CSP-Fehler im Script-Transport bei async Requests werden vermieden (Issue: #3969, Commit: 07a8e4a1)
- Die Auto-Promotion von JSON zu JSONP wurde entfernt (Issues: #1799, #3376, Commit: e7b3bc48)
s.contentTypewird ggf. mit dem Content-Type-Header überschrieben (Issue: #4119, Commit: 7fb90a6b)- AJAX-Event-Aliases werden deprecated; Inline-Event/Alias in deprecated (Commit: 23d53928)
- Scripts werden bei nicht erfolgreichen HTTP-Responses nicht ausgeführt (Issue: #4250, Commit: 50871a5a)
jQuery.ajaxSettings.xhrwurde vereinfacht (Issue: #1967, Commit: abdc89ac)
Attribute
.attr(name, false)entfernt jetzt für alle nicht-ARIA-Attribute (Issue: #5388, Commit: 063831b6)- Ein paar Bytes eingespart (Commit: b40a4807)
- Attribute werden im Setter nicht mehr stringifiziert (Issue: #4948, Commit: 4250b628)
- Die Signatur
toggleClass(boolean|undefined)wurde entfernt (Issues: #3388, Commit: a4421101) val()refactored: kein Strip von Carriage Return, IE-Workarounds isoliert (Commit: ff281991)- Type-Attr-Hook wird außerhalb von IE gar nicht mehr gesetzt (Commit: 9e66fe9a)
CSS
- Dimensionen von
<col>-Elementen in Tabellen gefixt (Issue: #5628, Commit: eca2a564) - Cache in
finalPropNameentfernt (Commit: 640d5825) - Tests gefixt & Tests unter CSS Zoom unterstützt (Issue: #5489, Commit: 071f6dba)
reliableTrDimensions-Supporttest für initial versteckte iframes gefixt (Commit: b1e66a5f)- Selector: an 3.x angeglichen, outer
selector.jswrapper entfernt (Commit: 53cf7244) reliableTrDimensions-Supporttest funktioniert mit Bootstrap CSS (Issue: #5270, Commit: 65b85031)offsetHeight(true)etc. inkludiert negative Margins (Issue: #3982, Commit: bce13b72)undefinedfür whitespace-only CSS-Variable-Werte (Commit: 7eb00196)- Whitespace von undefined custom property wird nicht getrimmt (Issue: #5105, Commit: ed306c02)
- Falsy Values werden in
addClass(array)übersprungen, Code komprimiert (Issue: #4998, Commit: a338b407) - Begründung für rtrim bei CSS-Property-Values (Commit: 655c0ed5)
- Whitespace um CSS Custom Properties wird getrimmt (Issue: #4926, Commit: efadfe99)
show,hideundtogglesind im Slim Build enthalten (Commit: 297d18dd)- Opacity CSS hook entfernt (Commit: 865469f5)
- Workaround für buggy getComputedStyle bei table rows in IE/Edge (Issue: #4490, Commit: 26415e08)
- „px“ wird nicht mehr automatisch hinzugefügt – mit wenigen Ausnahmen (Issues: #2795, Commit: 00a9c2e5)
Core (Auswahl)
- Obsolete Workarounds entfernt, Support-Kommentare aktualisiert (Commit: e2fe97b7)
$.parseHTMLwechselt vondocument.implementationaufDOMParser(Commit: 0e123509)- Exports-Setup für Bundler repariert (ESM & CommonJS) (Issue: #5416, Commit: 60f11b58)
- Mehr Infos zu named exports (Commit: 5f869590)
- Code vereinfacht nach Browser-Support-Reduktion (Commit: 93ca49e6)
- Factory in separate exports verschoben (Commit: 46f6e3da)
- Named exports in
src/(Issue: #5262, Commit: f75daab0) - Regression in
jQuery.text()auf HTMLDocument-Objekten gefixt (Issue: #5264, Commit: a75d6b52) - Selector:
jQuery.containsvom Selector ins Core-Modul verschoben (Commit: 024d8719) - Root-Parameter von
jQuery.fn.initentfernt (Commit: d2436df3) - Nicht mehr darauf angewiesen, dass
spliceauf Input vorhanden ist (Commit: 9c6f64c7) - Manipulation: Basic TrustedHTML Support (Issue: #4409, Commit: de5398a6)
- Browser-Fehler in parseXML werden reported (Issue: #4784, Commit: 89697325)
jQuery.isXMLDocakzeptiert falsy Input (Issue: #4782, Commit: fd421097)- Edge Legacy Support entfernt (Issue: #4568, Commit: e35fb62d)
- iframe script im eigenen Kontext ausführen, doc param in globalEval (Issue: #4518, Commit: 4592595b)
- Callbacks & Deferreds auch im Slim Build ausgeschlossen (Commit: fbc44f52)
- Migration von AMD zu ES modules (Commit: d0ce00cd)
- Array.prototype.flat nutzen, wo unterstützt (Issue: #4320, Commit: 9df4f1de)
- Private Kopien von push/sort/splice aus dem jQuery-Prototyp entfernt (Commit: b59107f5)
.even()&.odd()als Ersatz für POS:even&:odd(Commit: 78420d42)jQuery.trimdeprecated (Issue: #4363, Commit: 5ea59460)- IE-spezifische Support-Tests entfernt, reliance auf document.documentMode (Issue: #4386, Commit: 3527a384)
- Support für IE <11, iOS <11, Firefox <65, Android Browser & PhantomJS entfernt (Issue: #3950, #4299, Commit: cf84696f)
- Deprecated jQuery APIs entfernt (Issue: #4056, Commit: 58f0c00b)
Data
- Refactor zur Größenreduktion (Commit: 805cdb43)
- Event/Manipulation: Kollisionen mit Object.prototype verhindern (Issue: #3256, Commit: 9d76c0b1)
- camelCase-Implementierungen für Data & CSS/Effects getrennt (Issue: #3355, Commit: 8fae2120)
Deferred
getStackHookwurde zugetErrorHookumbenannt (Issue: #5201, Commit: 258ca1ec)- Source Maps werden in
jQuery.Deferred.exceptionHookrespektiert (Issue: #3179, Commit: 0b9c5037) - Rename master to primary (Commit: a32cf632)
Deprecated
.hover()wird über nicht-deprecated Methoden definiert (Commit: fd6ffc5e)jQuery.trimentfernt (Commit: 0b676ae1)- AMD Parameter-Reihenfolge gefixt (Commit: f810080e)
Dimensions
Docs
- Kleinere Kommentar-Issues gefixt (Commit: e4d4dd81)
- herodevs link im README aktualisiert (Issue: #5695, Commit: 093e63f9)
- CONTRIBUTING.md an
3.x-stableausgerichtet (Commit: d9281061) - CONTRIBUTING.md aktualisiert (Commit: 4ef25b0d)
- Version-Support-Sektion ins README (Commit: cbc2bc1f)
- Verbleibende HTTP-URLs auf HTTPS aktualisiert (Commit: 7cdd8374)
- Modul-Links im package README gefixt (Commit: ace646f6)
- watch task in CONTRIBUTING.md aktualisiert (Commit: 77d6ad71)
- Typos via codespell gefixt (Commit: 620870a1)
- Stale gitter badge entfernt (Commit: 67cb1af7)
- „Grunt build“-Sektion aus PR-Template entfernt (Commit: 988a5684)
- Stale badge aus README entfernt (Commit: bcd9c2bc)
- README des published package aktualisiert (Commit: edccabf1)
- git.io aus GitHub Actions Comment entfernt (Commit: 016872ff)
- webpack website in README aktualisiert (Commit: 01819bc3)
- Link zu patchwelcome und help wanted issues ergänzt (Commit: 924b7ce8)
- Link zum Preview der neuen CLAs ergänzt (Commit: 683ceb8f)
- Falsche
trac-NUMBERReferences gefixt (Commit: eb9ceb2f) - Expired links aus altem jquery source entfernt (Commit: ed066ac7)
- Links zum Web Archive aus source entfernt (Issue: #4981, Commit: e24f2dcf)
#NUMBERTrac References ersetzt durchtrac-NUMBER(Commit: 5d5ea015)- URL zum latest jQuery build in CONTRIBUTING.md aktualisiert (Commit: 9bdb16cd)
- CLA checkbox aus PR template entfernt (Commit: e1248931)
- irc auf Libera aktualisiert und LAMP dead link gefixt (Commit: 175db73e)
- Frequently Reported Issues in GitHub issue template aktualisiert (Commit: 7a6fae6a)
- JS Foundation mentions geändert zu OpenJS Foundation (Commit: 11611967)
- SECURITY.md ergänzt, security email address sichtbar (Commit: 2ffe54ca)
- Weitere Typos gefixt (Commit: 1a7332ce)
- Link zum jsdom repository aktualisiert (Commit: a62309e0)
- https für Hyperlinks in README (Commit: 73415da2)
- Mention vom event/alias.js module aus README entfernt (Commit: 3edfa1bc)
- Links zu EdgeHTML issues über Web Archive (Commit: 1dad1185)
- Users werden zu GitHub docs fürs Klonen des Repo geleitet (Commit: f1c16de2)
- OS X in README geändert zu macOS (Commit: 5a3e0664)
- Die meisten URLs zu HTTPS aktualisiert (Commit: f09d9210)
- Homebrew-Link von HTTP auf HTTPS (Commit: e0022f23)
Effect / Effects
- Unnötige Condition in
.stop()gefixt (Issue: #4374, Commit: 110802c7) jQuery.fx.intervalentfernt (Commit: 6c2c7362)
Event
.preventDefault()in beforeunload (Commit: 7c123dec)- Robusteres inner native event in leverageNative (Issue: #5459, Commit: 527fb3dc)
- Kollisionen zwischen jQuery.event.special & Object.prototype vermeiden (Commit: bcaeb000)
- Check für saved data in leverageNative vereinfacht (Commit: dfe212d5)
- trigger(focus/blur/click) funktioniert mit nativen Handlers (Issue: #5015, Commit: 6ad3651d)
- Focus/blur in IE über focusin/focusout simulieren (Issues: #4856, #4859, #4950, Commit: ce60d318)
- Fix: focus triggering nach
.on(focus).off(focus)nicht brechen (Issue: #4867, Commit: e539bac7) - Focus re-triggering fokussiert nicht zurück auf Originalelement (Issue: #4382, Commit: dbcffb39)
- Kein Crash, wenn Element während blur entfernt wird (Issue: #4417, Commit: 5c2d0870)
- event.which shim entfernt (Issue: #3235, Commit: 1a5fff4c)
- jQuery.event.global entfernt (Commit: 18db8717)
- Events werden nur an Objekte gebunden, die Daten akzeptieren (Issue: #4397, Commit: d5c505e3)
- Kein Shimming von focusin/focusout mehr (Issue: #4300, Commit: 8a741376)
- leverageNative registriert keine duplizierten dummy handlers (Commit: eb6c0a7c)
- Fix: Handling mehrerer async focus events (Issue: #4350, Commit: ddfa8376)
Manipulation
jQuery.cleanDataüberspringt beim Cleanup keine Elemente mehr (Issue: #5214, Commit: 3cad5c43)- Test generalisiert, um IE zu unterstützen (Commit: 88690ebf)
- Support für
$el.html(selfRemovingScript)(Issue: #5377, Commit: 937923d9) - domManip in separate Datei extrahiert (Commit: ee6e8740)
- HTML-Kommentare werden nicht aus scripts entfernt (Issue: #4904, Commit: 2f8f39e4)
- crossorigin-Attribut bei DOM-Manipulation respektiert (Issue: #4542, Commit: 15ae3614)
- Keine String-Konkatenation in buildFragment (Commit: 9c98e4e8)
jQuery.htmlPrefilterist jetzt Identity Function (Commit: 90fed4b4)- Selector: nodeName util genutzt, um Größe zu sparen (Commit: 4504fc3d)
Offset
- Search depth erhöht, um den „realen“ offset parent zu finden (Commit: 556eaf4a)
Release Engineering
- 4.0.0 Release (Commit: 4f2fae08)
- dist files aus main branch entfernt (Commit: c838cfb5)
- 4.0.0-rc.2 (Commit: 97525193)
- AUTHORS.txt aktualisiert (Commit: c128d5d8)
- Release-Fixes nach 4.0.0-rc.1 (Commit: a5b0c431)
- dist files aus main branch entfernt (Commit: 9d06c6dd)
- 4.0.0-rc.1 (Commit: 586182f3)
npm publishin post-release Phase ausführen (Commit: ff1f0eaa)- Nur browserless tests während Release ausführen (Commit: fb5ab0f5)
- Tests temporär während Release deaktivieren (Commit: 3f79644b)
- tmp/release/dist folder beim Releasing publizieren (Issue: #5658, Commit: a865212d)
- Build-Date in verification korrigiert; weitere Verbesserungen (Commit: 53ad94f3)
- dist files aus main branch entfernt (Commit: be048a02)
- 4.0.0-beta.2 (Commit: 51fffe9f)
- Builds haben korrekte Version (Commit: 3e612aee)
- preReleaseBase in config file (Commit: 1fa8df5d)
- Fix: pre/post release scripts unter Windows (Commit: 5518b2da)
- AUTHORS.txt aktualisiert (Commit: 862e7a18)
- Release-Prozess zu release-it migriert (Issue: jquery/jquery-release#114, Commit: 2646a8b0)
- Factory files zur Release-Distribution hinzugefügt (Issue: #5411, Commit: 1a324b07)
- buildDefaultFiles direkt nutzen und Version übergeben (Commit: b507c864)
- dist-module folder ebenfalls kopieren (Commit: 63767650)
- Nur versionierte Files zum CDN publizieren (Commit: 3a0ca684)
- Scripts und dev deps aus dist package.json entfernt (Commit: 7eac932d)
- Build-Command in Release.generateArtifacts aktualisiert (Commit: 3b963a21)
- md5 sums Support in Windows (Commit: f088c366)
- Kein globales grunt install mehr nötig (Commit: b2bbaa36)
- Release-Dependencies upgraded (Commit: 967af732)
- Unused chalk dependency entfernt (Commit: bfb6897c)
- In-repository dist README fixture genutzt (Commit: 358b769a)
- AUTHORS.txt aktualisiert (Commit: 1b74660f)
- AUTHORS.txt aktualisiert (Commit: cf9fe0f6)
Selector
- Workaround für
:hasentfernt; Tests auf iPhone & iPad (Commit: 65e35450) jQuery.expr[":"]/jQuery.expr.filterskorrekt deprecated (Commit: 329661fd)selector.jshängt vonattributes/attr.jsab (Issue: #5379, Commit: e06ff088)- selector.js Dependencies aus diversen Modulen eliminiert (Commit: e8b7db4b)
- jQuery.find.{tokenize,select,compile,setDocument} wieder exposed (Issue: #5259, Commit: 338de359)
- Nicht mehr auf
CSS.supports("selector(...)")verlassen (Issue: #5194, Commit: 68aa2ef7) - Selection context logic auf selector-native backport (Issue: #5185, Commit: 2e644e84)
- Selector lists funktionieren wieder mit
qSA(Issue: #5177, Commit: 09d988b7) uniqueSortchainable Methode implementiert (Issue: #5166, Commit: 5266f23c)- selector-native.js re-introduced (Commit: 4c1171f2)
- DOM-Manip innerhalb template contents gefixt (Issue: #5147, Commit: 3299236c)
- Legacy pseudos gedroppt, custom pseudos getestet (Commit: 8c7da22c)
- jQuery
:hasnutzen, wennCSS.supports(selector(...))non-compliant (Issue: #5098, Commit: d153c375) - “a:enabled” workaround für Chrome <=77 entfernt (Commit: c1ee33ad)
- Leere Attribute-Selector funktionieren wieder in IE (Issue: #4435, Commit: 05184cc4)
- Shallow document comparisons in uniqueSort (Issue: #4441, Commit: 15750b0a)
- Test für throwing on post-comma invalid selectors (Commit: 6eee5f7f)
- Selectors mit leading combinators nutzen wieder qSA (Commit: ed66d5a2)
- Shallow document comparisons vermeiden IE/Edge crashes (Issue: #4441, Commit: aa6344ba)
- Size reduziert, setDocument vereinfacht (Commit: 29a9544a)
- :scope pseudo-class leveraged, wo möglich (Issue: #4453, Commit: df6a7f7f)
- querySelectorAll shortcut usage zurückgebracht (Commit: cef4b731)
- Sizzle in selector module inline (Commit: 47835965)
- Sizzle tests zu jQuery portiert (Commit: 79b74e04)
Support
Traversing
contents()auf<object>s mit children in IE gefixt (Commit: ccbd6b93)contents()auf<object>s mit children gefixt (Issue: #4384, Commit: 4d865d96)
20 Jahre jQuery: Release mit Community-Faktor
Zum 20. Geburtstag gab es nicht nur ein Release, sondern auch ein Wiedersehen: Viele Beteiligte trafen sich laut Release-Post in Dallas zu einer Reunion, John Resig war per Zoom dabei. Der Blogpost selbst wurde in diesem gemeinsamen Moment veröffentlicht.

Praktischer Upgrade-Fahrplan (ohne Spekulation)
Wenn du von 3.x auf 4.0 gehst, ist der saubere Weg laut Ankündigung klar strukturiert:
- Upgrade-Guide lesen: https://jquery.com/upgrade-guide/4.0/
- jQuery Migrate einplanen: https://github.com/jquery/jquery-migrate/
- Breaking Changes gezielt testen: Fokus/Blur-Event-Reihenfolge, entfernte deprecated APIs, entfernte Array-Prototyp-Methoden, Slim-Build-Unterschiede
- Bei Problemen Issues melden: https://github.com/jquery/jquery/issues
Danksagung: viele Hände, ein Major-Release
Im Release wurden explizit viele Contributor genannt, die durch Patches, Bugreports oder Tests geholfen haben, u. a.: Alex, Ahmed S. El-Afifi, fecore1, Dallas Fraser, Richard Gibson, Michał Gołębiowski-Owczarek, Pierre Grimaud, Gabriela Gutierrez, Jonathan, Necmettin Karakaya, Anders Kaseorg, Wonseop Kim, Simon Legner, Shashanka Nataraj, Pat O’Callaghan, Christian Oliff, Dimitri Papadopoulos Orfanos, Wonhyoung Park, Bruno PIERRE, Baoshuo Ren, Beatriz Rezener, Sean Robinson, Ed Sanders, Timo Tijhof, Tom, Christian Wenz, ygj6 – sowie das gesamte jQuery-Team.
Referenzen / Quellen
- jQuery 4.0.0
- jQuery Upgrade Guide
- jquery/jquery-migrate
- jquery/jquery issues
- TrustedHTML – MDN Web Docs
- Promises/A+
- 4.0.0 compare 3.7.1…4.0.0
- Switch most asynchronous script requests to use <script> tags
- Migrate from AMD to ES modules
- Why AMD?
- RequireJS
- Rollup Introduction
- Drop support for IE 11 in stages (jQuery 5.0)
Markus Weber
Senior-Entwickler, Spezialist für Datenbankoptimierung und Performance-Tuning. PostgreSQL und Redis sind meine Favoriten. Ich liebe es, komplexe Probleme in einfache Lösungen zu zerlegen.
Alle Beiträge