There was a time not so long ago when jQuery was ubiquitous. It was used on almost every website as a matter of course, to the point that many HTML boilerplates included a reference to the CDN.
However, more and more I think it's probably unnecessary for two main use cases:
When jQuery first appeared, IE6 was commonplace, and browser API's were notoriously inconsistent. jQuery was very useful in ironing out those inconsistencies and helping to make the developer's experience a bit better.
Nowadays, that's no longer the case. Internet Explorer is on its way out, with IE11 being the only version still supported by Microsoft, and it's becoming increasingly hard to justify support for older versions, especially with mobile browsers forming a bigger than ever chunk of the market. We'll probably need to continue supporting IE11 for a good long while, and possibly IE10 for some time too, but these aren't anything like as bad to work with as IE6. It's worth noting that newer versions of jQuery are also dropping support for these older browsers, so in many ways it actually does less than it used to.
This is the usual thrust of articles on whether you should still be using jQuery so I'm not going to go over this matter , but for many smaller web apps, jQuery is no longer necessary, and a lot of developers have a tendency to keep using it when it's probably not required.
Nowadays, there's a lot of web applications that have moved big chunks of functionality from the server side to the client side. Beyond a certain (and quite small) level of complexity, jQuery just doesn't do enough to cut it. For me personally, the nature of the projects I work on means that this is a far, far bigger issue than the first one.
They also make a lot of things that jQuery does trivially easy - for instance, if you want to conditionally show and hide content in a React component, it's just a case of building it to hide that content based on a particular value in the props or state, or filtering a list is just a case of applying a filter to the array containing the data and setting the state as appropriate.
So when should you use jQuery?
I doubt it'd be worth the bother of ripping jQuery out of a legacy application and rewriting the whole thing to not require it, but for new builds I would think very hard about:
- Whether jQuery is sufficient, or you'd be better off using something like React, Vue or Angular
- If it is sufficient, whether it's actually necessary
In all honesty, I don't think using it when it's technically not necessary is as much of a big deal as the issue of using it when it's not really sufficient. Yes, downloading a library you technically don't need for a page is a bad practice, and it does make your site slower and harder for users on slow mobile connections, but there are ways to mitigate that such as CDN's, caching and minification. If you build a web app using jQuery alone when React, Vue or Angular would be more suitable, you're probably going to have to write a lot more code that will be difficult to maintain, test and understand. Things like React were created to solve the problems that arose when developers built complex client-side applications with jQuery, and are therefore a good fit for bigger applications. The complex setup does mean they have a threshold below which it's not worth the bother of using them, but past that threshold they result in better, more maintainable, more testable and more reusable code.
Now React is cool, you hate jQuery, you hipster...
Don't be a prat. Bitter experience has taught me that for a lot of my own personal use cases, jQuery is insufficient. It doesn't suck, it's just insufficient. If for your use case, jQuery is sufficient, then that's fine. All I'm saying is that when a web app becomes sufficiently complex, jQuery can begin to cause more problems than it solves, and that for a sufficiently complex web app you should consider other solutions.
It's not like using jQuery inevitably results in unmaintainable code, but it does require a certain amount of discipline to avoid it. A more opinionated library such as React makes it far, far harder to create spaghetti code, and makes code reuse natural in a way that jQuery doesn't.