Door
Inter Kode
op 20-06-2016 13:53
gewijzigd op 20-06-2016 15:14
3.126 views
Hey,
jQuery $() selector in vanilla JS:
<?php //Javascript
// Main selector
function $(selector) {
// Initialize array to store element(s)
var array = [];
// If there are multiple selectors we split by ','
var selectors = selector.split(','), i;
// Loop over each selector
for (i = 0; i < selectors.length; i++) {
// Convert the node list to an array and append the array
array.push.apply(array, Array.prototype.slice.call(document.querySelectorAll(selectors[i].trim())));
}
// If our array has 1 or more elements return the whole array, else we only return the single element
return array.length > 1 ? array : array[0];
}
?>
Minified 171 bytes :P
<?php
function $(t){var e,r=[],l=t.split(",");for(e=0;e<l.length;e++)t=l[e].trim(),"#"==t.substr(0,1)&&!t.indexOf(" ")>=0?r.push(document.getElementById(t.substr(1))):r.push.apply(r,Array.prototype.slice.call(document.querySelectorAll(t)));return r.length>1?r:r[0]}
?>
Gebruiksaanwijzing:
Ben het er mee eens. Ik heb me vroeger zo min mogelijk in JavaScript proberen te verdiepen, omdat ik dat inferieur achtte. En toen was JavaScript ook lastig, iedere browser had z'n eigen uitwerkingen. In die tijd kwamen er libraries als jQuery. Het is nu zelfs zo erg dat Microsoft z'n eigen JavaScript-stijl heeft uitgebracht onder de naam TypeScript. Ik snap het wel, maar als je voor iedereen (lees: moderne browsers) JavaScript wilt kunnen programmeren dan moet jQuery niet nodig zijn. Ook al zitten daar toch wel handige features in. ECMA-script is nu zo gestandaardiseerd met HTML5 dat het voor kleinere projecten ook helemaal niet nodig is om libraries te gebruiken. Dus je idee is een leuke aanvulling op het spectrum, scheelt weer zoeken als we minder 'verbose' JavaScript willen.
Klopt helemaal, als je aan mij vraagt waarom ik jQuery gebruik in productie is dat alleen voor cross-browser compatibility.
Mijn script is ook nog niet helemaal af want er is 1 functie die dus niet cross-browser is. http://caniuse.com/#search=getElementsByClassName
IE8, hier moet ik nog even wat op verzinnen
?
Onbekende gebruiker
20-06-2016 14:21
IE8? Zou ik laten ziten. Kijk maar eens naar de usage statistics op caniuse.com voor Nederland. Ruimschoots onder de 1%. IE8 is dood aan het gaan en zo moet het ook zijn. Eindelijk gerechtigheid! :-)
[code lang=js]$=(s,e)=>{return(e||document).querySelectorAll(s);};[/code]
Moet je browser wel ECMA6 ondersteunen overigens, anders:
[code lang=js]$=function(s,e){return(e||document).querySelectorAll(s);};[/code]
mocht je het tweede argument nooit gebruiken kan t nog simpeler:
[code lang=js]var $ = document.querySelectorAll.bind(document);[/code]
[hr]
Vaak gebruik ik zelf:
[code lang=js]
(function ($, $$) {