Skip to content

Commit 5257cff

Browse files
committed
nodelist fixes
- fixed toggleclass - fixed off event handlers
1 parent 9544e73 commit 5257cff

File tree

1 file changed

+18
-45
lines changed

1 file changed

+18
-45
lines changed

src/utils/NodeList.js

Lines changed: 18 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ let Events = []
77
function isNode (val) { return val instanceof window.Node }
88
function isNodeList (val) { return val instanceof window.NodeList || val instanceof NodeList || val instanceof window.HTMLCollection || val instanceof Array }
99

10+
function splitString (val) { console.log(val); val = val.trim(); return val.length ? val.replace(/\s+/, ' ').split(' ') : [] }
11+
function joinArray (val) { return val.length ? val.join(' ') : '' }
12+
1013
class NodeList {
1114
constructor (args) {
1215
var nodes = args
@@ -141,16 +144,18 @@ class NodeList {
141144
toggleClass (classes, value) {
142145
var method = (value === undefined || value === null) ? 'toggle' : value ? 'add' : 'remove'
143146
if (typeof classes === 'string') {
144-
classes = classes.trim().replace(/\s+/, ' ').split(' ')
147+
classes = splitString(classes)
145148
}
146149
this.each(el => {
147-
var list = el.className.trim().replace(/\s+/, ' ').split(' ')
150+
var list = splitString(el.className)
148151
classes.forEach(c => {
149152
var hasClass = ~list.indexOf(c)
150153
if (!hasClass && method !== 'remove') list.push(c)
151154
if (hasClass && method !== 'add') { list = list.filter(el => (el !== c)) }
152155
})
153-
el.className = list.join(' ')
156+
list = joinArray(list)
157+
if (!list) el.removeAttribute('class')
158+
else el.className = list
154159
})
155160
return this
156161
}
@@ -205,7 +210,7 @@ class NodeList {
205210

206211
// event handlers
207212
on (events, selector, callback) {
208-
if (typeof events === 'string') { events = events.trim().replace(/\s+/, ' ').split(' ') }
213+
if (typeof events === 'string') { events = splitString(events) }
209214
if (!this || !this.length) return this
210215
if (callback === undefined) {
211216
callback = selector
@@ -243,48 +248,16 @@ class NodeList {
243248
callback = events
244249
events = null
245250
}
246-
if (typeof events === 'string' && callback instanceof Function) {
247-
this.each(el => {
248-
events.split(' ').forEach(event => {
249-
Events.forEach((e, i) => {
250-
if(Events[i] && Events[i].el === el && Events[i].event === event && Events[i].callback === callback) {
251-
Events[i].el.removeEventListener(Events[i].event, Events[i].callback)
252-
delete Events[i]
253-
}
254-
})
255-
})
256-
})
257-
} else if (typeof events === 'string') {
258-
this.each(el => {
259-
events.split(' ').forEach(event => {
260-
Events.forEach((e, i) => {
261-
if (Events[i] && Events[i].el === el && Events[i].event === event) {
262-
Events[i].el.removeEventListener(Events[i].event, Events[i].callback)
263-
delete Events[i]
264-
}
265-
})
266-
})
267-
})
268-
} else if (callback instanceof Function) {
269-
this.each(el => {
270-
Events.forEach(e => {
271-
if (Events[e] && Events[e].el === el && Events[e].callback === callback) {
272-
Events[e].el.removeEventListener(Events[e].event, Events[e].callback)
273-
delete Events[e]
274-
}
275-
})
276-
})
277-
} else {
278-
this.each(el => {
279-
Events.forEach(e => {
280-
if (Events[e] && Events[e].el === el) {
281-
Events[e].el.removeEventListener(Events[e].event, Events[e].callback)
282-
delete Events[e]
283-
}
284-
})
251+
events = events instanceof Array ? events : typeof events === 'string' ? splitString(events) : null
252+
this.each(el => {
253+
Events = Events.filter(e => {
254+
if(e && e.el === el && (!callback || callback === e.callback) && (!events || ~events.indexOf(e.event))) {
255+
e.el.removeEventListener(e.event, e.callback)
256+
return false
257+
}
258+
return true
285259
})
286-
}
287-
Events = Events.filter(el => (el !== undefined ))
260+
})
288261
return this
289262
}
290263
onBlur (callback) {

0 commit comments

Comments
 (0)