NOTA : non l'ho mai usato nel codice di produzione, ma penso che sia un'idea molto carina per ottenere il disaccoppiamento tra HTML e JavaScript.
Il metodo che hai scelto è quello che uso tutto il tempo. Se sai che i nomi delle variabili non cambieranno ma i selettori a cui fanno riferimento potrebbero, ecco una soluzione che potrebbe funzionare per te (anche se sacrifichi alcune cose mentre lo fai).
Potresti avere un contenitore che si riempie di variabili per te. Dovrai nominare la variabile in entrambi i modi, in modo che tu possa memorizzare il nome in un attributo e inizializzare il contenitore quando viene caricato il DOM.
Ecco un esempio di questa tecnica in Vanilla JS:
function test() {
// access elements from container
console.log(DOMComponents.example);
}
function initializeDOMComponentContainer() {
// create a container if it doesn't exist
if (!window.DOMComponents || typeof window.DOMComponents === 'undefined') {
window.DOMComponents = {};
}
// look for all elements with data-var attribute and add to container
[].forEach.call(document.querySelectorAll('[data-var]'), function (el) {
var id = el.id,
name = el.getAttribute('data-var');
if (typeof id !== 'undefined' && name.length > 0) {
DOMComponents[name] = '#' + id;
}
});
}
document.addEventListener('DOMContentLoaded', function () {
initializeDOMComponentContainer();
test();
});
Dovresti semplicemente aggiungere un attributo al tuo codice HTML per approfittare di questo:
<table id="example" class="display" data-var="example" cellspacing="0" width="100%">
...
</table>
Quindi definiresti i nomi delle variabili in un attributo data-var
e non li cambierai mai e continuerai ad accedere agli elementi come faresti normalmente.
Personalmente, penso che sia un'idea carina, ma sacrifichi la possibilità di vedere un oggetto che puoi visualizzare dal controllo statico del codice. Puoi sempre aprire una console per controllarla, ma c'è solo qualcosa di carino nel vedere la mappa nel codice.