per il concatenamento di lavorare, un metodo deve restituire l'oggetto che vuoi catena. Poiché i metodi .classList
non restituiscono né l'oggetto classList
né l'oggetto DOM, non è possibile eseguire in modo nativo il concatenamento.
Si potrebbe, naturalmente, scrivere i propri metodi e farli restituire l'oggetto appropriato e quindi reimplementare la funzionalità in modo concatenabile, ma si dovrebbe metterli su un prototipo di sistema per essere in grado di usali con la stessa facilità.
Senza reimplementare i metodi chainable, si potrebbe ridurre il codice di un po ':
var sidebarList = document.querySelector("#sidebar").classList;
sidebarList.toggle("active");
sidebarList.remove("hover");
Se si desidera aggiungere metodi chainable sugli oggetti reali HTML5, si potrebbe fare questo:
(function() {
var p = HTMLElement.prototype;
p.clAdd = function(cls) {
this.classList.add(cls);
return this;
};
p.clRemove = function(cls) {
this.classList.remove(cls);
return this;
};
p.clToggle = function(cls) {
this.classList.toggle(cls);
return this;
}
})();
// sample use
document.querySelector("#sidebar").clAdd("active").clRemove("inactive");
Demo di lavoro: http://jsfiddle.net/jfriend00/t6w4aj0w/
.210
Oppure, se si desidera un'interfaccia .classList
tipo, si potrebbe fare questo:
Object.defineProperty(HTMLElement.prototype, "classListChain", {
get: function() {
var self = this;
return {
add: function(cls) {
self.classList.add(cls);
return self;
},
remove: function(cls) {
self.classList.remove(cls);
return self;
},
toggle: function(cls) {
self.classList.toggle(cls);
return self;
}
}
}
});
// sample use
document.querySelector("#sidebar").classListChain.add("active").classListChain.remove("inactive");
demo di lavoro: http://jsfiddle.net/jfriend00/pxm11vcq/
FYI, perché entrambe queste opzioni catena l'elemento effettivo DOM (a differenza il metodo di torazaburo cui le catene un oggetto personalizzato), è possibile aggiungere un elemento DOM metodo/proprietà alla fine come in:
el.classListChain.add("active").style.visibility = "visible";
In alternativa, si può fare qualcosa di simile:
var el = document.querySelector("#sidebar").classListChain.add("active");
Si potrebbe scrivere la propria funzione che funziona come jQuery. – SLaks
Oppure è possibile evitare del tutto il concatenamento. –
http://jsfiddle.net/7f8ud2s0/ – undefined