<100 subscribers
Here’s a curated list of useful javascript functions and snippets I’ve collected throughout the years.
Get and set standard window and document and set them as variables
var w = window, d = document, e = d.documentElement, g = d.getElementsByTagName('body')[0], x = w.innerWidth || e.clientWidth || g.clientWidth, y = w.innerHeight|| e.clientHeight|| g.clientHeight; alert(x + ' × ' + y);
This function uses regex to remove HTML from strings.
let new_string = string.replace(/(<([^>]+)>)/gi, "");
Use String.prototype.match()
to break the string into words using an appropriate regexp.
const toCamelCase = str => { let s = str && str .match( /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g ) .map(x => x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase()) .join(''); return s.slice(0, 1).toLowerCase() + s.slice(1); };
Usage:
toCamelCase('some_database_field_name'); // 'someDatabaseFieldName' toCamelCase('Some label that needs to be camelized'); // 'someLabelThatNeedsToBeCamelized' toCamelCase('some-javascript-property'); // 'someJavascriptProperty' toCamelCase('some-mixed_string with spaces_underscores-and-hyphens'); // 'someMixedStringWithSpacesUnderscoresAndHyphens'
This little snippet will return the full URL path.
var url = window.location.protocol + "//" + window.location.host + "/" + window.location.pathname + window.location.search
This uses reges to validate an email address.
function checkEmail(email) { var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; if (!reg.test(email)) return false; return true; }
Here we remove duplicate items from an array. Compiled by Svein Petter Gjøby.
const array = [1, 1, 1, 3, 3, 2, 2]; // Method 1: Using a Set const unique = [...new Set(array)]; // Method 2: Array.prototype.reduce const unique = array.reduce((result, element) => { return result.includes(element) ? result : [...result, element]; }, []); // Method 3: Array.prototype.filter const unique = array.filter((element, index) => { return array.indexOf(element) === index; });
This function will round numbers to two decimal places, and ensure that the returned value has two decimal places. For example 12.006 will return 12.01, .3 will return 0.30, and 5 will return 5.00. From Chris Coyier’s site.
function CurrencyFormatted(amount) { var i = parseFloat(amount); if(isNaN(i)) { i = 0.00; } var minus = ''; if(i < 0) { minus = '-'; } i = Math.abs(i); i = parseInt((i + .005) * 100); i = i / 100; s = new String(i); if(s.indexOf('.') < 0) { s += '.00'; } if(s.indexOf('.') == (s.length - 2)) { s += '0'; } s = minus + s; return s; }
Force a frame to reload. This example uses jQuery.
$('iframe').attr('src', $('iframe').attr('src'));
Pretty much what the title says, this will make any external link on the page open in a new window; useful for content sites.
$('a').each(function() { var a = new RegExp('/' + window.location.host + '/'); if(!a.test(this.href)) { $(this).click(function(event) { event.preventDefault(); event.stopPropagation(); window.open(this.href, '_blank'); }); } });
Here’s some alternative methods of targeting external links with jQuery.
// Technique #1 $('a').filter(function() { return this.hostname && this.hostname !== location.hostname; }).addClass("external"); // Technique #2 $.expr[':'].external = function(obj) { return !obj.href.match(/^mailto\:/) && (obj.hostname != location.hostname); }; $('a:external').addClass('external'); // Technique #3 $('a:not([href^="http://your-website.com"]):not([href^="#"]):not([href^="/"])').addClass('external'); // Technique #4 $('a').each(function() { var a = new RegExp('/' + window.location.host + '/'); if (!a.test(this.href)) { // This is an external link } });
Make your console.log() output pop.
console.log("%cBuilt by 351 Studios", "background-color:#FFCD02;color:#333333;padding:0.3em 1em;font-weight:900;line-height:1.5em;font-size:2em;");
Force your function to run after page load.
if (window.attachEvent) { window.attachEvent('onload', yourFunctionName); } else { if (window.onload) { var curronload = window.onload; var newonload = function(evt) { curronload(evt); yourFunctionName(evt); }; window.onload = newonload; } else { window.onload = yourFunctionName; } }
Use Element.classList
and DOMTokenList.contains()
to check if the element has the specified class.
const hasClass = (el, className) => el.classList.contains(className);
Usage:
hasClass(document.querySelector('p.classname'), 'classname'); // returns true
Toggles a class for an HTML element.
const toggleClass = (el, className) => el.classList.toggle(className);
Usage:
toggleClass(document.querySelector('p.classname'), 'classname');
A function to add a class to an element.
function addClass(id, new_class) { var i, n=0; new_class = new_class.split(","); for (i=0; i < new_class.length; i++) { if ((" " + document.getElementById(id).className + " ").indexOf(" " + new_class[i] + " ") == -1 ){ document.getElementById(id).className+=" "+new_class[i]; n++; } } return n; }
Usage:
onclick="addClass('changeme', 'round')"
Straightforward HTML to force an input to be focused.
<textarea rows="10" cols="50" onclick="this.focus();this.select()" readonly="readonly"> example text </textarea>
See if a value is contained in an array.
/** * Array.prototype.[method name] allows you to define/overwrite an objects method * needle is the item you are searching for * this is a special variable that refers to "this" instance of an Array. * returns true if needle is in the array, and false otherwise */ Array.prototype.contains = function ( needle ) { for (i in this) { if (this[i] == needle) return true; } return false; } // Now you can do things like: var x = Array(); if (x.contains('foo')) { // do something special }
htmlentities() is a PHP function which converts special characters (like <) into their escaped/encoded values (like <). This allows you to show to display the string without the browser reading it as HTML.
function htmlEntities(str) { return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'); }
Simple one liner to strip numbers from a string using regex.
newString = someString.replace(/[0-9]/g, '');
Sometimes you just need to check for jQuery with Javascript. Here’s a useful method:
if (typeof jQuery == 'undefined') { // jQuery IS NOT loaded, do stuff here. }
Detect whether the device has touch capabilities.
var hasTouch; window.addEventListener('touchstart', function setHasTouch () { hasTouch = true; window.removeEventListener('touchstart', setHasTouch); }, false);
Checks if keys is non-empty and use Array.prototype.every() to then check its keys to internal depth of the object.
const hasKey = (obj, keys) => { return ( keys.length > 0 && keys.every(key => { if (typeof obj !== 'object' || !obj.hasOwnProperty(key)) return false; obj = obj[key]; return true; }) ); };
Makes a GET request to the passed URL.
const httpGet = (url, callback, err = console.error) => { const request = new XMLHttpRequest(); request.open('GET', url, true); request.onload = () => callback(request.responseText); request.onerror = () => err(request); request.send(); };
Usage:
httpGet( 'https://urlgoeshere.com', console.log );
Makes a POST request to the passed URL.
const httpPost = (url, data, callback, err = console.error) => { const request = new XMLHttpRequest(); request.open('POST', url, true); request.setRequestHeader('Content-type', 'application/json; charset=utf-8'); request.onload = () => callback(request.responseText); request.onerror = () => err(request); request.send(data); };
Usage:
const post = { user: 1, id: 222, title: 'Marko Bajlovic', body: 'Galaxies globular star cluster muse about the carbon in our apple pies two ghostly white figures in coveralls and helmets are soflty dancing courage of our questions.' }; const data = JSON.stringify(post); httpPost( 'https://urlgoeshere.com', data, console.log );
Redirects the page to HTTPS if it’s currently in HTTP.
const httpsRedirect = () => { if (location.protocol !== 'https:') location.replace('https://' + location.href.split('//')[1]); };
Usage:
httpsRedirect();
Inserts an HTML string after the end of the specified element.
const insertAfter = (el, htmlString) => el.insertAdjacentHTML('afterend', htmlString);
Usage:
insertAfter(document.getElementById('myId'), '<p>after</p>');
Inserts an HTML string before the start of the specified element.
const insertBefore = (el, htmlString) => el.insertAdjacentHTML('beforebegin', htmlString);
Usage:
insertBefore(document.getElementById('myId'), '<p>before</p>');
Inserts an HTML string before the start of the specified element.
const isAlphaNumeric = str => /^[a-z0-9]+$/gi.test(str);
Usage:
isAlphaNumeric('hello123'); // true isAlphaNumeric('123'); // true isAlphaNumeric('hello 123'); // false (space character is not alphanumeric) isAlphaNumeric('#$hello'); // false
Converts a string to a URL-friendly slug.
const slugify = str => str .toLowerCase() .trim() .replace(/[^\w\s-]/g, '') .replace(/[\s_-]+/g, '-') .replace(/^-+|-+$/g, '');
Usage:
slugify('Hello World?'); // 'hello-world'
Returns the singular or plural form of the word based on the input number, using an optional dictionary if supplied.
const pluralize = (val, word, plural = word + 's') => { const _pluralize = (num, word, plural = word + 's') => [1, -1].includes(Number(num)) ? word : plural; if (typeof val === 'object') return (num, word) => _pluralize(num, word, val[word]); return _pluralize(val, word, plural); };
Usage:
pluralize(0, 'apple'); // 'apples' pluralize(1, 'apple'); // 'apple' pluralize(2, 'apple'); // 'apples' pluralize(2, 'person', 'people'); // 'people' const PLURALS = { person: 'people', radius: 'radii' }; const autoPluralize = pluralize(PLURALS); autoPluralize(2, 'person'); // 'people'
Iterates over a callback n
times
const times = (n, fn, context = undefined) => { let i = 0; while (fn.call(context, i) !== false && ++i < n) {} };
Usage:
var output = ''; times(5, i => (output += i)); console.log(output); // 01234
Send a string to the clipboard.
function copyToClipboard() { const copyText = document.getElementById("myInput"); copyText.select(); document.execCommand("copy"); }
or
//new API function copyToClipboard() { navigator.clipboard.writeText(document.querySelector('#myInput').value) }
Break down a fetch step by step. If the response is good, the response will be returned as JSON. If a 404 or any non-network issue error occurs, the response code will be returned. Promises will be rejected and catched to (error => console.error(
Fetch Error =\n, error)))
.
const fetch = require('node-fetch'); let multifetch = async () => { let urls = [ "https://flathub.org/stats/52", "https://flathub.org/stats/2018/06/03.json", "https://flathub.org/stats/52", "https://flathub.org/stats/2018/06/03.json" ] // urls.map( e => fetch(e) // .then(response => response.json()) // parses response to JSON // .catch(error => console.error(`Fetch Error =\n`, error))) for (let e of urls) { fetch(e) .then(response => response.ok ? response : response.status) // parses response to JSON .then(res => console.log(res)) .catch(error => console.error(`Fetch Error =\n`, error)) } } multifetch(); // async/await version let data = await fetch(url) .then(res => res.ok ? res : res.status) .catch(error => console.error(`Fetch Error =\n`, error));
Hope some of these you find useful on your programming travels.