Learn JavaScript
stackoverflow.com
stackoverflow.com
I'd recommend learning the language first, then the basics of the DOM and subscribing to the main browser's blogs to keep up with their changes.
If you just want a site to learn JavaScript, I'd highly recommend https://developer.mozilla.org/en/JavaScript (as other people have too). Mozilla's docs are top-notch. They're a wiki so sign up and help make them even better.
I really liked looking at the underscore.js literate source but thats a little more theoretical than practical.
Also if you are just learning javascript you might as well learn jQuery because it will do a huge chunk of your basic practical needs. If you are learning javascript to really understand the language or build something super complex you may wanna watch the crockford videos and understand prototypes and those things. Otherwise jQuery will probably cover you.
That said, I'm currently reading Learning Python the Hard Way, which pushes you through a lot of information, step-by-step but not patronizing, and teaches you not only code, but how to be organized and on top of your code.
"Test Driven JavaScript Development", Chris Johansen, might serve. Not many exercises, but it walks through some of the core JavaScript principles, using tests as a learning / exploring device. "Here's a test showing how the << this >> keyword works."
It also walks through several examples of test driven development, touching on design principles as it goes. It does a great job of walking through the practicalities forcing some design choices, and the implications of the alternatives.
I came away from this with a much better grasp of JavaScript, development process, and design principles generally. I don't think I've gotten more from any single book.
But I'm a newbie still trying to learn these things. More experienced folks may find the book tiresome.
My local hackerspace, the Buffalo Lab is hosting the first meeting of the Buffalo JavaScript Club which is tomorrow. I am hoping this will jump-start me... http://www.meetup.com/hackerspaces/events/25855541/
Sign up for Lynda.com watch the JavaScript videos a couple of times and then get started.
I found that when something gets turned into a video a lot of the un-necessary and verbose ness get taken out. Plus you get the advantage of the tutor putting the right emphasis on the right words.
I have learned quite a few things that way.
I appreciate that your suggestion is to learn jQuery and then go through a language reference, not to stop once you've done the jQuery bit, but trust me, that's just what most people will do.
jQuery is a very opinionated library, which is fine in and of itself, but that makes it a terrible introduction to JavaScript, precisely because it "hides most of the ugliness of the language", as you put it.
To understand why this is a problem, consider the following points.
1) jQuery is not the only DOM library out there. Prototype, MooTools, Dojo and YUI are just some of them. To be a good front-end developer one should know at least a couple, and be able to learn any of them. The easiest way to learn them is to know the language and just learn a library, rather than learning a bunch of different DSLs with perhaps a few unifying themes.
2) JavaScript is now used on the server as well, and to write server-side JavaScript one really does need to know the language.
3) If one ever wants to write anything beyond hacky little scripts—a real web application, for example—then one cannot get away with just knowing jQuery. Large applications must be structured. The rats' nest of callbacks that many jQuery programmers seem to think is sufficient and even appropriate application design will not scale to large codebases. The key skill here is knowing what sort of structure needs to be introduced and being able to use both use libraries which provide the necessary abstraction and write one's own where necessary.