12 ms·
Fundamentally, jQuery is just a JavaScript API to normalize the DOM. It doesn't force you to program or organize your code in a certain way (i.e. Spaghetti codi
by Encosia 16y ago
Fundamentally, jQuery is just a JavaScript API to normalize the DOM. It doesn't force you to program or organize your code in a certain way (i.e. Spaghetti coding). I'm honestly curious to see a legitimate example of what you mean.
- dstein 16y ago"It doesn't force you to program or organize your code in a certain way" Yes it does. JQuery calls it "new wave JavaScript", but really it's just an anti-pattern. JQuery forces you to select all elements using $() before being able to use any of the methods. And you have to call $().get(0) to get the selected element out. It is this unnecessary process that gets very tiresome. Let's see if this makes it more clear: $('#elm').color('red'); /* do some stuff here */ $('#elm').text('new text'); To simplify that (and not require a redundante DOM call) you'd use a local variable to store a reference to the element: var d = $('#elm').get(0); $(d).color('red'); /* do some stuff here */ $(d).text('new text'); I argue that this is unnecessary when you could just write conventional code instead: var d = document.getElmentById('elm'); d.style.color = 'red'; /* do some stuff here */ d.innerHTML = 'new text'; The way the $() function operates just doesn't sit well with all coders, regardless of how solid JQuery is in other respects.
- Encosia 16y agoThat isn't necessary. This does the same thing: var d = $('#elm'); d.color('red'); // do some stuff here. d.text('new text');
- andrewf 16y agoSome use the convention that jQuery objects should be prefixed with $, so: var $d = $('#elm'); $d.color('red'); $d.text('new text'); I do this, and like it, despite my classic aversion to both Systems Hungarian and GW-BASIC.
- simonw 16y agoIf you want to access the underlying DOM element (which I very rarely find myself needing to do when working with jQuery - the $-enhanced version provides methods for everything I might want to do with it) a shorter idiom than .get(0) is this: var el = $('#el')[0];
- FooBarWidget 16y agoA few years ago I might have agreed with your statement. It was the reason why I used Prototype instead of jQuery: prototype extends the HTMLElement classes directly instead of requiring a wrapper object like jQuery does. But for various reasons I've switched to jQuery half a year ago, and I've never looked back. I can't say that the $() stuff is that much of an issue: it's clearly documented, easy to use, and I find the general DOM methods to be so useless that I'm only using the Prototype/jQuery methods 90% of the time anyway. Your claim that it's an anti-pattern is way exaggerated.
- dstein 16y agoIt boils down to philosophy. Not all developers like the $() function. And it's not even specific to JQuery anymore, most libraries are doing this now. And for old school JavaScript developers, the "ninja-javascript" just doesn't sit right.