Comments (5)
Good point, how about:
el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ')
from youmightnotneedjquery.
Using \b won't handle hyphens in class names correctly.
You still need to add parentheses around that middle | section or it'll fail for my first test case.
from youmightnotneedjquery.
I can't actually reproduce the first issue (the need for parens), but the hyphenated class issue is a problem.
from youmightnotneedjquery.
Here's a complete test case for the first issue:
function removeCls(el, className) {
if (el.classList) {
el.classList.remove(className);
}
else {
el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
}
}
var span = document.createElement('span');
span.className = 'a b cab';
removeCls(span, 'a b');
alert(span.className);
It's a bit more subtle than that though. Is the removeCls function supposed to support space-separated classes as an argument or not? The RegExp version seems to suggest yes (it splits and joins them) but it then gives the wrong result. The classList implementation just throws an error.
from youmightnotneedjquery.
The conclusion we came to when dealing with the same issue on add class, was that we need two comparisons, one called 'add class', the other called 'add classes'. The jQuery would be the same for both, but the js will differ.
from youmightnotneedjquery.
Related Issues (20)
- Range labels should be clickable for accessibility
- Two comparison directories HOT 1
- Errors when loading in Internet Explorer 11 HOT 2
- Modernization HOT 17
- Replace slider with radio buttons or select HOT 9
- Bugs with Brazilian/Portuguese internationalization HOT 1
- Don't change URL query params by default HOT 1
- Support adding HTML for a defer/module load example
- I18n HOT 3
- Support for refresh an element HOT 3
- Namespaced Events
- Event delegation does not match jQuery behaviour HOT 3
- The selector option of Prev does not match jQuery behaviour
- Spread operator is not needed for the iterable in for...of
- Last is having a NodeList uses array method directly
- Trigger Native needs to be looked into HOT 2
- Next is missing the feature of optional selector, which the jQuery version has HOT 1
- The `:visible` selector is not listed HOT 1
- Example with error HOT 1
- Some example, why not jquery for readibility ? HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from youmightnotneedjquery.