łańcuchowym do pracy, metoda musi zwrócić obiekt, który z którym chcesz się połączyć. Ponieważ metody .classList
nie zwracają ani obiektu classList
, ani obiektu DOM, nie można natywnie połączyć się z nimi.
Można oczywiście napisać własne metody i zwrócić im odpowiedni obiekt, a tym samym ponownie wprowadzić funkcjonalność w sposób łańcuchowy, ale musielibyśmy umieścić je na prototypie systemu, aby móc używaj ich tak łatwo.
Bez reimplementing metod chainable, można skrócić kod nieco:
(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");
:
var sidebarList = document.querySelector("#sidebar").classList;
sidebarList.toggle("active");
sidebarList.remove("hover");
Jeśli chcesz dodać metody chainable na rzeczywistych obiektach HTML5, można to zrobić
Demo robocze: http://jsfiddle.net/jfriend00/t6w4aj0w/
Albo, jeśli chcesz interfejs .classList
typu, można to zrobić:
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 robocza: http://jsfiddle.net/jfriend00/pxm11vcq/
FYI, ponieważ obie te opcje łańcucha rzeczywistego elementu DOM (w przeciwieństwie do metoda torazaburo, która prowadzi łańcuch do niestandardowego obiektu), możesz dodać metodę/właściwość elementu DOM na końcu: w następujący sposób:
el.classListChain.add("active").style.visibility = "visible";
Lub, można zrobić coś takiego:
var el = document.querySelector("#sidebar").classListChain.add("active");
można napisać własną funkcję, która działa jak jQuery. – SLaks
Lub może całkowicie uniknąć łączenia. –
http://jsfiddle.net/7f8ud2s0/ – undefined