Lets create a thing to replace the very simple selector calls for id and classes.
First lets have simple selector for both the id and single class.
return document.getElementById(name) || [...document.getElementsByClassName(name)]
Here we also return a single value when you pass an id and an array (expanding the default HTMLCollection) when a class is passed.
Now, if we want the make the whole thing more elegant like this:
elements.footer // == document.querySelector('#footer') elements.button // == document.querySelectorAll('.button')
We can use the a proxy handler to catch the selector like text that we defined above and return the elements.
const elements = new Proxy({}, { get(target, name) { return document.getElementById(name) || [...document.getElementsByClassName(name)]; } })
Where every time a property of elements must be deference the name of the property will end up in the get method in the name argument.
_done