{"id":178,"date":"2026-01-19T00:00:00","date_gmt":"2026-01-18T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/sl\/jquery-4-0-0-kaj-se-je-spremenilo-in-kako-nadgraditi\/"},"modified":"2026-01-19T00:00:00","modified_gmt":"2026-01-18T23:00:00","slug":"jquery-4-0-0-kaj-se-je-spremenilo-in-kako-nadgraditi","status":"publish","type":"post","link":"https:\/\/helloblog.io\/sl\/jquery-4-0-0-kaj-se-je-spremenilo-in-kako-nadgraditi\/","title":{"rendered":"jQuery 4.0.0 je tu: kaj se je spremenilo, kaj se lomi in kako varno nadgraditi"},"content":{"rendered":"\n<p>14. januarja 2006 je John Resig na BarCampu v New Yorku prvi\u010d predstavil jQuery. Dvajset let kasneje je ekipa objavila kon\u010dno izdajo <strong>jQuery 4.0.0<\/strong>, ki prihaja po dolgem razvojnem ciklu in ve\u010d predizdajah. Gre za prvo ve\u010djo (major) izdajo po skoraj 10 letih \u2013 in to pomeni tudi nekaj <strong>breaking changes<\/strong>. Dobra novica: po napovedi ekipe bi morala ve\u010dina projektov nadgraditi z minimalnimi popravki, \u010de se nadgradnje loti\u0161 sistemati\u010dno.<\/p>\n\n\n\n<p>Glavni cilj 4.0.0 je bil \u017ee dolgo na seznamu: po\u010distiti dedi\u0161\u010dino, odstraniti prej zastarele API-je, odrezati interno kodo, ki je v javnih funkcijah obstajala kot nedokumentirana \u201cnotranja\u201d mo\u017enost, in se odpovedati nekaterim &#8220;magic&#8221; vedenjem, ki so bila kompleksna za vzdr\u017eevanje.<\/p>\n\n\n\n<p>Za prehod sta pripravljena <strong>upgrade guide<\/strong> in nova izdaja <strong>jQuery Migrate<\/strong> (plugin, ki pomaga zaznati in ubla\u017eiti nezdru\u017eljivosti). \u010ce med nadgradnjo naleti\u0161 na te\u017eave, ekipa prosi, da jih prijavi\u0161 v issue trackerju na GitHubu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kje dobi\u0161 jQuery 4.0.0 (CDN, npm, slim build)<\/h2>\n\n\n\n<p>Izdaja je objavljena na uradnem jQuery CDN in kot npm paket. Tretji CDNi jo bodo praviloma prevzeli z zamikom (njihovih urnikov jQuery ne kontrolira), zato je za hiter za\u010detek najvarneje uporabiti uradni CDN.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>CDN (ne-minificirano): https:\/\/code.jquery.com\/jquery-4.0.0.js<\/li>\n\n\n<li>CDN (minificirano): https:\/\/code.jquery.com\/jquery-4.0.0.min.js<\/li>\n\n\n<li>npm: <code>npm install jquery@4.0.0<\/code><\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Slim build (\u0161e manj\u0161i paket)<\/h3>\n\n\n\n<p>Poleg \u201cpolne\u201d izdaje obstaja tudi <strong>slim<\/strong> razli\u010dica. Ideja ostaja ista kot v preteklosti: v\u010dasih ne potrebuje\u0161 AJAX-a, za animacije raje uporabi\u0161 CSS in razrede, in v sodobnih brskalnikih (razen IE11) ima\u0161 <strong>native Promises<\/strong>, zato dodatni moduli pogosto niso nujni.<\/p>\n\n\n\n<p>V jQuery 4.0.0 je slim build \u0161e manj\u0161i, ker so iz njega odstranili <strong>Deferreds<\/strong> in <strong>Callbacks<\/strong> \u2013 zdaj je velik pribli\u017eno <strong>19.5k bytes gzipped<\/strong>. Deferredi so \u017ee dolgo skladni s standardom <strong>Promises A+<\/strong>, zato se ve\u010dina uporabe lahko preseli na native Promise metode. Deferredi sicer nudijo nekaj dodatnih zmo\u017enosti, ki jih native Promises nimajo, ampak v tipi\u010dnih aplikacijah jih je mogo\u010de zamenjati.<\/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\">\u010ce \u0161e vedno podpira\u0161 IE11<\/h4>\n\n\n<p>Native Promises v vseh brskalnikih, ki jih podpira jQuery 4.0, niso na voljo samo v <strong>IE11<\/strong>. \u010ce mora\u0161 podpirati IE11, je po priporo\u010dilu ekipe bolje uporabiti <strong>main build<\/strong> ali dodati <strong>polyfill<\/strong> za Promises.<\/p>\n\n<\/div>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>CDN (slim, ne-minificirano): https:\/\/code.jquery.com\/jquery-4.0.0.slim.js<\/li>\n\n\n<li>CDN (slim, minificirano): https:\/\/code.jquery.com\/jquery-4.0.0.slim.min.js<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Najpomembnej\u0161e prelomne spremembe v jQuery 4.0.0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1) Podpora za IE<11 je odstranjena (IE10 in starej\u0161i)<\/h3>\n\n\n\n<p>jQuery 4.0 ukine podporo za <strong>IE10 in starej\u0161e<\/strong>. Pogosto vpra\u0161anje je, zakaj ne tudi IE11. Razlog je na\u010drtovan prehod po fazah: naslednji korak (odstranitev podpore za IE11) je predviden za <strong>jQuery 5.0<\/strong> (glej PR: https:\/\/github.com\/jquery\/jquery\/pull\/5077). Trenutno je fokus na odstranitvi kode, ki je specifi\u010dno podpirala verzije starej\u0161e od IE11.<\/p>\n\n\n\n<p>Poleg tega je padla podpora \u0161e za druge zelo stare brskalnike: <strong>Edge Legacy<\/strong>, <strong>iOS verzije starej\u0161e od zadnjih 3<\/strong>, <strong>Firefox verzije starej\u0161e od zadnjih 2<\/strong> (izjema je Firefox ESR) in <strong>Android Browser<\/strong>. Po napovedi naj na tvoji strani ne bi bilo potrebno ni\u010d spreminjati \u2013 razen \u010de mora\u0161 katerega od teh brskalnikov \u0161e vedno podpirati. V tem primeru ostani na <strong>jQuery 3.x<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2) Trusted Types in Content Security Policy (CSP)<\/h3>\n\n\n\n<p>jQuery 4.0 doda podporo za <strong>Trusted Types<\/strong> \u2013 mehanizem, ki pomaga zmanj\u0161ati XSS napade tako, da brskalnik zahteva, da \u201cnevarni\u201d stringi (npr. HTML) prihajajo iz preverjenih virov. Konkretno: HTML, zavit v <strong>TrustedHTML<\/strong> (MDN: https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/TrustedHTML), je mogo\u010de uporabiti kot vhod v jQuery metode za manipulacijo DOM-a na na\u010din, ki ne kr\u0161i CSP direktive <code>require-trusted-types-for<\/code>.<\/p>\n\n\n\n<p>Poleg tega so pri async nalaganju skriptov naredili pomembno spremembo zaradi CSP. Del AJAX zahtevkov je \u017ee prej uporabljal <code>&lt;script&gt;<\/code> tage, da ohrani atribute, kot je <code>crossdomain<\/code>. Zdaj so ve\u010dino asinhronih zahtevkov za skripte preklopili na uporabo <code>&lt;script&gt;<\/code> tagov (PR: https:\/\/github.com\/jquery\/jquery\/pull\/4763), da se izognejo CSP napakam, ki se lahko pojavijo pri inline scriptih.<\/p>\n\n\n\n<p>\u0160e vedno obstaja nekaj primerov, kjer se za asinhrone script requeste uporabi XHR \u2013 npr. ko je podana opcija <code>&quot;headers&quot;<\/code> (ekipa izrecno svetuje: uporabi <code>scriptAttrs<\/code> namesto tega). Kadar je mogo\u010de, jQuery zdaj uporablja <code>&lt;script&gt;<\/code> tag.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3) Izvorna koda jQuery je migrirala na ES modules<\/h3>\n\n\n\n<p>Velik premik za build pipeline: koda na veji <code>main<\/code> je pre\u0161la z <strong>AMD<\/strong> (Why AMD: https:\/\/requirejs.org\/docs\/whyamd.html) na <strong>ES modules<\/strong> (PR: https:\/\/github.com\/jquery\/jquery\/pull\/4541). jQuery je sicer \u017ee prej objavljal source na npm in GitHubu, ampak ga ni bilo mogo\u010de neposredno uva\u017eati kot module brez <strong>RequireJS<\/strong> (https:\/\/requirejs.org\/), ker je bil to dolga leta jQueryjev build tool.<\/p>\n\n\n\n<p>Pakiranje je zdaj na <strong>Rollup<\/strong> (https:\/\/rollupjs.org\/introduction\/), test suite pa se poganja tudi posebej nad ES modules. Rezultat: jQuery se bolje vklopi v sodobne build toole, workflowe in brskalnike, tudi prek <code>&lt;script type=module&gt;<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4) Odstranjeni zastareli (deprecated) API-ji<\/h3>\n\n\n\n<p>jQuery 4.0.0 odstrani funkcije, ki so bile ozna\u010dene kot deprecated \u017ee ve\u010d verzij. Del njih je bil vedno mi\u0161ljen kot interni, del pa je postal nepotreben, ker imajo vsi podprti brskalniki \u017ee dolgo native ekvivalente. Odstranjeno je:<\/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>Namesto tega uporabi native alternative, kot so <code>Array.isArray()<\/code>, <code>JSON.parse()<\/code>, <code>String.prototype.trim()<\/code> in <code>Date.now()<\/code>.<\/p>\n\n\n\n<p>Kombinacija odstranitve teh API-jev in odstranitve IE-legacy podpore je po navedbah ekipe prinesla zmanj\u0161anje velikosti za <strong>ve\u010d kot 3k bytes gzipped<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5) Iz jQuery prototipa so izginile interne Array metode (push, sort, splice)<\/h3>\n\n\n\n<p>jQuery prototip je dolgo \u010dasa vseboval Array metode, ki se niso obna\u0161ale kot ostale jQuery metode in so bile v praksi namenjene le internim potrebam. To so: <code>push<\/code>, <code>sort<\/code> in <code>splice<\/code>. V 4.0 so te metode odstranjene iz prototipa.<\/p>\n\n\n\n<p>\u010ce si jih slu\u010dajno uporabljal nad jQuery kolekcijo, predlagana zamenjava izgleda takole: namesto <code>$elems.push( elem )<\/code> uporabi <code>[].push.call( $elems, elem )<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6) Zaporedje focus\/blur dogodkov je zdaj po W3C specifikaciji<\/h3>\n\n\n\n<p>Dolga leta brskalniki niso bili usklajeni glede vrstnega reda dogodkov focus\/blur (vklju\u010dno z <code>focusin<\/code>, <code>focusout<\/code>, <code>focus<\/code>, <code>blur<\/code>). V zadnjih verzijah brskalnikov, ki jih jQuery 4.0 podpira, se je vrstni red kon\u010dno poenotil \u2013 \u017eal pa je druga\u010den od vrstnega reda, ki ga je jQuery \u017ee leta dosledno zagotavljal. To je zato prelomna sprememba.<\/p>\n\n\n\n<p>Od jQuery 4.0 naprej jQuery ne prepisuje ve\u010d native vedenja. Vsi brskalniki razen IE bodo sledili trenutni W3C specifikaciji, in sicer:<\/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>V prej\u0161njih verzijah je bil jQuery vrstni red: <code>focusout<\/code>, <code>blur<\/code>, <code>focusin<\/code>, <code>focus<\/code>. Zanimiv zgodovinski detajl, ki ga omenja ekipa: edini brskalnik, ki je kdaj sledil stari W3C specifikaciji (pred posodobitvijo leta 2023), je bil Internet Explorer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prakti\u010den plan za nadgradnjo (jQuery 3.x \u2192 4.0.0)<\/h2>\n\n\n\n<p>Ker so breaking changes realni, se spla\u010da nadgradnje lotiti kot mini-migracije in ne kot \u201czamenjaj datoteko na CDN-ju in upaj\u201d. To so konkretni koraki, ki se lepo ujemajo z orodji, ki jih je ekipa pripravila.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Preveri, ali tvoj product \u0161e vedno potrebuje podporo za IE10\/Edge Legacy\/Android Browser ali stare iOS\/Firefox verzije. \u010ce ja, ostani na jQuery 3.x.<\/li>\n\n\n<li>Preberi uradni upgrade guide: https:\/\/jquery.com\/upgrade-guide\/4.0\/ (to je tvoja \u201cchecklista\u201d za breaking changes).<\/li>\n\n\n<li>Vklju\u010di jQuery Migrate: https:\/\/github.com\/jquery\/jquery-migrate\/ in najprej odpravi opozorila\/napake, ki jih poka\u017ee na obstoje\u010di kodi.<\/li>\n\n\n<li>Posebej testiraj: (a) manipulacijo HTML in CSP\/Trusted Types, (b) focus\/blur event flow na kriti\u010dnih UI komponentah, (c) kodo, ki je uporabljala odstranjene API-je ali prototipne Array metode.<\/li>\n\n\n<li>Ko nadgradi\u0161 na 4.0.0, ponovno preveri kriti\u010dne tokove in \u010de naleti\u0161 na bug, ga prijavi v jQuery repo: https:\/\/github.com\/jquery\/jquery\/issues.<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Kaj je novega \u0161e \u201cpod pokrovom\u201d (iz changeloga)<\/h2>\n\n\n\n<p>Uradni objavi je prilo\u017een obse\u017een changelog. Spodaj je povzetek po podro\u010djih \u2013 brez \u201cmarketin\u0161kega\u201d filtra, bolj v smislu: kje so se stvari dejansko premaknile in kaj to pomeni za integracije.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ajax<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Ne obravnava ve\u010d array data kot binarne podatke (Don&#8217;t treat array data as binary).<\/li>\n\n\n<li>Dovoli <code>processData: true<\/code> tudi za binarne podatke (Allow <code>processData: true<\/code> even for binary data).<\/li>\n\n\n<li>Podpora za binarne podatke (vklju\u010dno s FormData) (Support binary data (including FormData)).<\/li>\n\n\n<li>Podpora <code>headers<\/code> pri script transportu tudi kadar je cross-domain (Support <code>headers<\/code> for script transport even when cross-domain) \u2013 issue #5142.<\/li>\n\n\n<li>Podpora <code>null<\/code> kot success funkcija v <code>jQuery.get<\/code> (Support <code>null<\/code> as success functions in <code>jQuery.get<\/code>) \u2013 issue #4989.<\/li>\n\n\n<li>Scriptov ne izvede samodejno, \u010de dataType ni podan (Don&#8217;t auto-execute scripts unless dataType provided) \u2013 issue #4822.<\/li>\n\n\n<li>responseJSON deluje tudi pri napa\u010dnih same-domain JSONP requestih (Make responseJSON work for erroneous same-domain JSONP requests).<\/li>\n\n\n<li>Izvede JSONP error script responses (Execute JSONP error script responses) \u2013 issue #4771.<\/li>\n\n\n<li>Prepre\u010devanje CSP napak v script transportu za async requeste (Avoid CSP errors in the script transport for async requests) \u2013 issue #3969.<\/li>\n\n\n<li>Odstranjena je logika samodejne promocije json \u2192 jsonp (Drop the json to jsonp auto-promotion logic) \u2013 issues #1799 in #3376.<\/li>\n\n\n<li>\u010ce je prisoten content-type header, prepi\u0161e <code>s.contentType<\/code> (Overwrite s.contentType with content-type header value, if any) \u2013 issue #4119.<\/li>\n\n\n<li>AJAX event aliases so deprecated; inline event\/alias v deprecated (Deprecate AJAX event aliases, inline event\/alias into deprecated).<\/li>\n\n\n<li>Ne izvaja scriptov pri neuspe\u0161nih HTTP responseih (Do not execute scripts for unsuccessful HTTP responses) \u2013 issue #4250.<\/li>\n\n\n<li>Poenostavljen <code>jQuery.ajaxSettings.xhr<\/code> (Simplify jQuery.ajaxSettings.xhr) \u2013 issue #1967.<\/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><code>.attr( name, false )<\/code> zdaj odstrani atribut za vse non-ARIA atribute (Make <code>.attr( name, false )<\/code> remove for all non-ARIA attrs) \u2013 issue #5388.<\/li>\n\n\n<li>Dodatno zmanj\u0161anje velikosti (Shave off a couple of bytes).<\/li>\n\n\n<li>Setter ne spreminja atributov v string (Don&#8217;t stringify attributes in the setter) \u2013 issue #4948.<\/li>\n\n\n<li>Odstranjena signatura <code>toggleClass(boolean|undefined)<\/code> (Drop the <code>toggleClass(boolean|undefined)<\/code> signature) \u2013 issue #3388.<\/li>\n\n\n<li>Refaktor <code>val()<\/code>: ne odstranjuje carriage return, IE workaroundi izolirani (Refactor val(): don&#8217;t strip carriage return, isolate IE workarounds).<\/li>\n\n\n<li>Ne nastavlja type attr hook izven IE (Don&#8217;t set the type attr hook at all outside of IE).<\/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>Popravljene dimenzije za <code>&lt;col&gt;<\/code> elemente v tabelah (Fix dimensions of table <code>&lt;col&gt;<\/code> elements) \u2013 issue #5628.<\/li>\n\n\n<li>Odstranjen cache v finalPropName (Drop the cache in finalPropName).<\/li>\n\n\n<li>Testi: popravki in podpora testom pod CSS Zoom (Fix tests &#038; support tests under CSS Zoom) \u2013 issue #5489.<\/li>\n\n\n<li>Popravljen reliableTrDimensions test za za\u010detno skrite iframe (Fix reliableTrDimensions support test for initially hidden iframes).<\/li>\n\n\n<li>Selector: poravnava s 3.x, odstranjen zunanji <code>selector.js<\/code> wrapper (Align with 3.x, remove the outer <code>selector.js<\/code> wrapper).<\/li>\n\n\n<li>reliableTrDimensions test deluje z Bootstrap CSS (Make the reliableTrDimensions support test work with Bootstrap CSS) \u2013 issue #5270.<\/li>\n\n\n<li><code>offsetHeight( true )<\/code> ipd. vklju\u010duje negativne margine (Make <code>offsetHeight( true )<\/code>, etc. include negative margins) \u2013 issue #3982.<\/li>\n\n\n<li>Za CSS variable value, ki je samo whitespace, vrne <code>undefined<\/code> (Return <code>undefined<\/code> for whitespace-only CSS variable values) \u2013 #5120.<\/li>\n\n\n<li>Ne trimma whitespace pri undefined custom property (Don&#8217;t trim whitespace of undefined custom property) \u2013 issue #5105.<\/li>\n\n\n<li>V <code>addClass( array )<\/code> presko\u010di falsy vrednosti; kompresija kode (Skip falsy values in <code>addClass( array )<\/code>, compress code) \u2013 issue #4998.<\/li>\n\n\n<li>Utemeljitev uporabe rtrim na CSS vrednostih (Justify use of rtrim on CSS property values).<\/li>\n\n\n<li>Trim whitespace okoli CSS Custom Properties vrednosti (Trim whitespace surrounding CSS Custom Properties values) \u2013 issue #4926.<\/li>\n\n\n<li>Metode <code>show<\/code>, <code>hide<\/code> in <code>toggle<\/code> so vklju\u010dene tudi v slim build (Include <code>show<\/code>, <code>hide<\/code> &#038; <code>toggle<\/code> methods in the jQuery slim build).<\/li>\n\n\n<li>Odstranjen opacity CSS hook (Remove the opacity CSS hook).<\/li>\n\n\n<li>Workaround za buggy getComputedStyle na table rows v IE\/Edge (Workaround buggy getComputedStyle on table rows in IE\/Edge) \u2013 issue #4490.<\/li>\n\n\n<li>Ne dodaja ve\u010d samodejno <code>px<\/code> ve\u010dini lastnosti (z nekaj izjemami) (Don&#8217;t automatically add &#8220;px&#8221; to properties with a few exceptions) \u2013 issue #2795.<\/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>Odstranjeni zastareli workaroundi, posodobljeni support komentarji (Remove obsolete workarounds, update support comments).<\/li>\n\n\n<li><code>$.parseHTML<\/code> preklopljen z <code>document.implementation<\/code> na <code>DOMParser<\/code> (Switch <code>$.parseHTML<\/code> from <code>document.implementation<\/code> to <code>DOMParser<\/code>).<\/li>\n\n\n<li>Popravljena export nastavitev za bundlerje z ESM &#038; CommonJS (Fix the exports setup to make bundlers work with ESM &#038; CommonJS) \u2013 issue #5416.<\/li>\n\n\n<li>Ve\u010d informacij o named exports (Add more info about named exports).<\/li>\n\n\n<li>Poenostavitve po zmanj\u0161anju browser supporta (Simplify code post browser support reduction).<\/li>\n\n\n<li>Factory prestavljen v lo\u010den exports (Move the factory to separate exports).<\/li>\n\n\n<li>Named exports uporabljeni v <code>src\/<\/code> (Use named exports in <code>src\/<\/code>) \u2013 issue #5262.<\/li>\n\n\n<li>Popravljen regression v <code>jQuery.text()<\/code> na HTMLDocument objektih (Fix regression in jQuery.text() on HTMLDocument objects) \u2013 issue #5264.<\/li>\n\n\n<li>Selector: <code>jQuery.contains<\/code> prestavljen iz selector modula v core (Move jQuery.contains from the selector to the core module).<\/li>\n\n\n<li>Odstranjen root parameter v <code>jQuery.fn.init<\/code> (Drop the root parameter of jQuery.fn.init).<\/li>\n\n\n<li>Ne zana\u0161a se na prisotnost splice na inputu (Don&#8217;t rely on splice being present on input).<\/li>\n\n\n<li>Manipulation: osnovna TrustedHTML podpora (Add basic TrustedHTML support) \u2013 issue #4409.<\/li>\n\n\n<li>parseXML poro\u010da browser napake (Report browser errors in parseXML) \u2013 issue #4784.<\/li>\n\n\n<li><code>jQuery.isXMLDoc<\/code> sprejme tudi falsy input (Make jQuery.isXMLDoc accept falsy input) \u2013 issue #4782.<\/li>\n\n\n<li>Odstranjena podpora za Edge Legacy (Drop support for Edge Legacy) \u2013 issue #4568.<\/li>\n\n\n<li>Iframe script se izvede v svojem kontekstu; doc param v globalEval (Fire iframe script in its context, add doc param in globalEval) \u2013 issue #4518.<\/li>\n\n\n<li>Slim build: izlo\u010dena tudi callbacks &#038; deferred modula (Exclude callbacks &#038; deferred modules in the slim build as well).<\/li>\n\n\n<li>Migracija z AMD na ES modules (Migrate from AMD to ES modules).<\/li>\n\n\n<li>Uporabi <code>Array.prototype.flat<\/code> kjer je podprto (Use Array.prototype.flat where supported) \u2013 issue #4320.<\/li>\n\n\n<li>Odstranjene privatne kopije push\/sort\/splice iz prototipa (Remove private copies of push, sort &#038; splice from the jQuery prototype).<\/li>\n\n\n<li>Dodani <code>.even()<\/code> in <code>.odd()<\/code> kot zamenjava za psevdoselektorja :even in :odd (Implement .even() &#038; .odd() to replace POS :even &#038; :odd).<\/li>\n\n\n<li>Deprecate <code>jQuery.trim<\/code> \u2013 issue #4363, nato odstranitev deprecated API-jev \u2013 issue #4056.<\/li>\n\n\n<li>IE support testi odstranjeni; zana\u0161a se na document.documentMode (Remove IE-specific support tests, rely on document.documentMode) \u2013 issue #4386.<\/li>\n\n\n<li>Drop support: IE <11, iOS <11, Firefox <65, Android Browser &#038; PhantomJS (Drop support for IE <11, iOS <11, Firefox <65, Android Browser &#038; PhantomJS) \u2013 issues #3950 in #4299.<\/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>Refaktor za zmanj\u0161anje velikosti (Refactor to reduce size).<\/li>\n\n\n<li>Event\/Manipulation: prepre\u010dene kolizije z Object.prototype (Prevent collisions with Object.prototype) \u2013 issue #3256.<\/li>\n\n\n<li>Lo\u010deni camelCase implementaciji za data in css\/effects (Separate data &#038; css\/effects camelCase implementations) \u2013 issue #3355.<\/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><code>getStackHook<\/code> preimenovan v <code>getErrorHook<\/code> \u2013 issue #5201.<\/li>\n\n\n<li>Upo\u0161tevanje source mapov v <code>jQuery.Deferred.exceptionHook<\/code> \u2013 issue #3179.<\/li>\n\n\n<li>Rename master \u2192 primary.<\/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><code>.hover()<\/code> je definiran z ne-deprecated metodami (Define <code>.hover()<\/code> using non-deprecated methods).<\/li>\n\n\n<li>Odstranjen <code>jQuery.trim<\/code> (Remove jQuery.trim).<\/li>\n\n\n<li>Popravljen AMD parameter order (Fix AMD parameter order).<\/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>Dodana offset prop fallback logika za Firefox pri unreliable TR dimensions (Add offset prop fallback to FF for unreliable TR dimensions) \u2013 issue #4529.<\/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>Effect: popravljena nepotrebna pogojna izjava v <code>.stop()<\/code> \u2013 issue #4374.<\/li>\n\n\n<li>Effects: odstranjen <code>jQuery.fx.interval<\/code> (Remove jQuery.fx.interval).<\/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>Uporabi <code>.preventDefault()<\/code> v beforeunload (Use <code>.preventDefault()<\/code> in beforeunload).<\/li>\n\n\n<li>Bolj robustno obna\u0161anje inner native eventa v leverageNative \u2013 issue #5459.<\/li>\n\n\n<li>Izognitev kolizijam med <code>jQuery.event.special<\/code> in Object.prototype (Avoid collisions between jQuery.event.special &#038; Object.prototype).<\/li>\n\n\n<li>Poenostavljen check za saved data v leverageNative (Simplify the check for saved data in leverageNative).<\/li>\n\n\n<li>trigger(focus\/blur\/click) deluje z native handlerji \u2013 issue #5015.<\/li>\n\n\n<li>Simulacija focus\/blur v IE prek focusin\/focusout \u2013 issues #4856, #4859, #4950.<\/li>\n\n\n<li>Popravek: focus triggering se ne zlomi po <code>.on(focus).off(focus)<\/code> \u2013 issue #4867.<\/li>\n\n\n<li>Focus re-trigger ne fokusira originalnega elementa nazaj \u2013 issue #4382.<\/li>\n\n\n<li>Ne sesuje se, \u010de je element odstranjen ob blur \u2013 issue #4417.<\/li>\n\n\n<li>Odstranjen event.which shim \u2013 issue #3235.<\/li>\n\n\n<li>Odstranjen <code>jQuery.event.global<\/code> (remove jQuery.event.global).<\/li>\n\n\n<li>Eventi se pripnejo samo na objekte, ki res sprejemajo data \u2013 issue #4397.<\/li>\n\n\n<li>Ne shima ve\u010d focusin\/focusout dogodkov (Stop shimming focusin &#038; focusout events) \u2013 issue #4300.<\/li>\n\n\n<li>Prepre\u010di dvojno registracijo dummy handlerjev v leverageNative (Prevent leverageNative from registering duplicate dummy handlers).<\/li>\n\n\n<li>Popravek obravnave ve\u010d async focus eventov \u2013 issue #4350.<\/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><code>jQuery.cleanData<\/code> med cleanupom ne preskakuje elementov \u2013 issue #5214.<\/li>\n\n\n<li>Splo\u0161nej\u0161i test za podporo IE (Generalize a test to support IE).<\/li>\n\n\n<li>Podpora <code>$el.html(selfRemovingScript)<\/code> \u2013 issues #5377 in #5378.<\/li>\n\n\n<li>domManip izlo\u010den v lo\u010deno datoteko (Extract domManip to a separate file).<\/li>\n\n\n<li>Ne odstranjuje HTML komentarjev iz scriptov \u2013 issue #4904.<\/li>\n\n\n<li>Upo\u0161teva script crossorigin atribut pri DOM manipulaciji \u2013 issue #4542.<\/li>\n\n\n<li>buildFragment se izogne konkatenaciji stringov (Avoid concatenating strings in buildFragment).<\/li>\n\n\n<li><code>jQuery.htmlPrefilter<\/code> je identity funkcija (Make jQuery.htmlPrefilter an identity function).<\/li>\n\n\n<li>Selector: uporaba nodeName util kjer je mogo\u010de (Use the nodeName util where possible to save size).<\/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>Pove\u010dana globina iskanja pri dolo\u010danju \u201cpravega\u201d offset parenta (Increase search depth when finding the &#8216;real&#8217; offset parent).<\/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>Odstranjen workaround za <code>:has<\/code>; testi na iPhone in iPad (Remove the workaround for <code>:has<\/code>; test both on iPhone &#038; iPad).<\/li>\n\n\n<li>Pravilno deprecated <code>jQuery.expr[ &quot;:&quot; ]<\/code>\/<code>jQuery.expr.filters<\/code> (Properly deprecate <code>jQuery.expr[ &quot;:&quot; ]<\/code>\/<code>jQuery.expr.filters<\/code>).<\/li>\n\n\n<li><code>selector.js<\/code> je odvisen od <code>attributes\/attr.js<\/code> \u2013 issue #5379.<\/li>\n\n\n<li>Odstranjene <code>selector.js<\/code> odvisnosti iz razli\u010dnih modulov (Eliminate <code>selector.js<\/code> depenencies from various modules).<\/li>\n\n\n<li>Ponovno izpostavljen <code>jQuery.find.{tokenize,select,compile,setDocument}<\/code> \u2013 issue #5259.<\/li>\n\n\n<li>Ne zana\u0161a se ve\u010d na <code>CSS.supports( &quot;selector(...)&quot; )<\/code> \u2013 issue #5194.<\/li>\n\n\n<li>Backport selection context logike v selector-native \u2013 issue #5185.<\/li>\n\n\n<li>Selector listi spet delujejo z <code>qSA<\/code> \u2013 issue #5177.<\/li>\n\n\n<li>Dodana chainable metoda <code>uniqueSort<\/code> \u2013 issue #5166.<\/li>\n\n\n<li>Ponovna uvedba selector-native.js (Re-introduce selector-native.js).<\/li>\n\n\n<li>Manipulation: popravek DOM manip znotraj template contents \u2013 issue #5147.<\/li>\n\n\n<li>Odstranjena podpora za legacy pseudos; test custom pseudos (Drop support for legacy pseudos, test custom pseudos).<\/li>\n\n\n<li>Uporabi jQuery <code>:has<\/code>, \u010de je <code>CSS.supports(selector(...))<\/code> nekompatibilen \u2013 issue #5098.<\/li>\n\n\n<li>Odstranjen workaround za <code>a:enabled<\/code> na Chrome <=77 (Remove the \"a:enabled\" workaround for Chrome <=77).<\/li>\n\n\n<li>Empty attribute selectorji spet delujejo v IE \u2013 issue #4435.<\/li>\n\n\n<li>Shallow document comparisons v uniqueSort \u2013 issue #4441.<\/li>\n\n\n<li>Test: throw na post-comma invalid selectorjih (Add a test for throwing on post-comma invalid selectors).<\/li>\n\n\n<li>Selectorji z leading combinators spet uporabljajo qSA (Make selectors with leading combinators use qSA again).<\/li>\n\n\n<li>Shallow document comparisons za izogib IE\/Edge crashom \u2013 issue #4441.<\/li>\n\n\n<li>Zmanj\u0161anje velikosti in poenostavitev setDocument (reduce size, simplify setDocument).<\/li>\n\n\n<li>Uporaba pseudo-class <code>:scope<\/code> kjer je mogo\u010de \u2013 issue #4453.<\/li>\n\n\n<li>Vrnjen querySelectorAll shortcut usage (Bring back querySelectorAll shortcut usage).<\/li>\n\n\n<li>Inline Sizzle v selector modul (Inline Sizzle into the selector module).<\/li>\n\n\n<li>Port Sizzle testov v jQuery (Port Sizzle tests to jQuery).<\/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>Support div ima zagotovljen <code>display: block<\/code> (ensure display is set to block for the support div) \u2013 issue #4832.<\/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>Popravek <code>contents()<\/code> na <code>&lt;object&gt;<\/code> z otroki v IE (Fix <code>contents()<\/code> on <code>&lt;object&gt;<\/code>s with children in IE).<\/li>\n\n\n<li>Popravek <code>contents()<\/code> na <code>&lt;object&gt;<\/code> z otroki (Fix <code>contents()<\/code> on <code>&lt;object&gt;<\/code>s with children) \u2013 issue #4384.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">20 let jQuery: reunion fotografija<\/h2>\n\n\n\n<p>Ob 20. obletnici se je del ekipe in sodelavcev sre\u010dal v Dallasu, John Resig pa se jim je pridru\u017eil prek Zooma. Objava 4.0.0 je nastala v \u010dasu tega sre\u010danja.<\/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\/17\/2026\/01\/jquery-reunion-group-edited.jpeg\" alt=\"Skupinska fotografija jQuery reunion sre\u010danja ob 20. obletnici\" class=\"wp-image-177\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/jquery-reunion-group-edited.jpeg 1804w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/jquery-reunion-group-edited-300x226.jpeg 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/jquery-reunion-group-edited-1024x771.jpeg 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/jquery-reunion-group-edited-768x579.jpeg 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/jquery-reunion-group-edited-1536x1157.jpeg 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/jquery-reunion-group-edited-400x301.jpeg 400w\" sizes=\"auto, (max-width: 1804px) 100vw, 1804px\" \/><figcaption class=\"wp-element-caption\">jQuery 20th Birthday reunion (Dallas), objavljeno ob izidu jQuery 4.0.0. \u2014 <em>Forr\u00e1s: blog.jquery.com (The jQuery Foundation)<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Povezave, ki jih je smiselno imeti pri roki<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Upgrade guide 4.0: https:\/\/jquery.com\/upgrade-guide\/4.0\/<\/li>\n\n\n<li>jQuery Migrate: https:\/\/github.com\/jquery\/jquery-migrate\/<\/li>\n\n\n<li>Prijava te\u017eav (issues): https:\/\/github.com\/jquery\/jquery\/issues<\/li>\n\n\n<li>Full changelog (compare 3.7.1\u20264.0.0): https:\/\/github.com\/jquery\/jquery\/compare\/3.7.1&#8230;4.0.0<\/li>\n\n\n<li>Download informacije: https:\/\/jquery.com\/download\/<\/li>\n\n<\/ul>\n\n\n<div class=\"references-section\">\n                <h2>Reference \/ Viri<\/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:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/TrustedHTML\" target=\"_blank\" rel=\"noopener noreferrer\">TrustedHTML &#8211; Web APIs | MDN<\/a><\/li><li><a href=\"https:\/\/requirejs.org\/docs\/whyamd.html\" target=\"_blank\" rel=\"noopener noreferrer\">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:\/\/github.com\/jquery\/jquery\/compare\/3.7.1...4.0.0\" target=\"_blank\" rel=\"noopener noreferrer\">Full changelog: 4.0.0<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Po skoraj desetletju je iz\u0161el jQuery 4.0.0 \u2013 prva velika verzija po dolgem \u010dasu, z nekaj prelomnimi spremembami in precej modernizacije. \u010ce ima\u0161 v projektih \u0161e vedno jQuery 3.x, je to dober trenutek, da si pripravi\u0161 na\u010drt nadgradnje.<\/p>\n","protected":false},"author":47,"featured_media":176,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[90],"tags":[95,93,94,92,91],"class_list":["post-178","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programski-jeziki","tag-browser-support","tag-csp","tag-es-modules","tag-javascript","tag-jquery"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/posts\/178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/users\/47"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/comments?post=178"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/posts\/178\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/media\/176"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/media?parent=178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/categories?post=178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/tags?post=178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}