4 ms·
I wasn't talking about debugging techniques. It doesn't matter at all what you do between those statements. Any time you need to access DOM elements or do any
by dstein 16y ago
I wasn't talking about debugging techniques. It doesn't matter at all what you do between those statements.
Any time you need to access DOM elements or do anything rudimentary JQuery just gets in the way because you can't even make use of local variables and for-loops without resulting in spaghetti code.
- Encosia 16y agoFundamentally, 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.