<p>
        Its fundamental philosophy, centering on collections of DOM Elements, puts it squarely where most Javascript developers program most. By contrast, other frameworks, like Prototype and Dojo, take a functional approach. Sure, they’re fully capable of addressing DOM Elements, just like jQuery, but these other frameworks make entirely different choices. Prototype, for one, fancies itself
        a true Object Oriented extension of Javascript’s paltry native offerings. In pursuit of true object-orientedness, its developers have put a substantial amount of time into developing object-oriented classes for different types of functionality.
        A class for forms, a class for elements, a class for events. It goes on and on.
        It’s perfectly possible to write clean, good-looking Prototype code. And Prototype can emulate one of the best things about jQuery’s focus on DOM Element collections:
        its chainability. But jQuery conceives of modern Javascript development the way many major players in the Javascript community are starting to see it: as DOM
        Scripting first and foremost. For those of us whose Javascriptprogramming focuses primarily on page elements, and Isuspect that’s most of us, jQuery makes the work dead simple.
        </p>

        <p>
        Most jQuery methods start with the collection of elements,
        using the handy support for CSS3, XPath, and a slew of custom expressions
        (like :visible, which returns only visible elements, and :checked, which returns only
        checked form fields). Once you obtain a group of elements, the fun begins. Add
        .fadeIn(“slow”) and each of the elements will fade in—slowly. But we’re not done. Without skipping a beat, add .addClass(“thisIsDamnFun”). Each element will
        get the class “thisIsDamnFun.” It is, isn’t it? And it can go on from there.
        Add .click(function() { alert(“Hello”) }); to throw up an alert box when
        any of the elements are clicked. Add .append(“Hello”) and the word
        hello will be appended to the end of each of the matched elements.
        Cool, huh?
        </p>

        <p>
        Now that you’ve seen the power
        of jQuery methods, how do we
        get the element collection in the
        first place? Happily, we have CSS
        (1-3) at our disposal, as well as a limited subset of XPath, and some
        nice custom expressions thrown
        in for good measure.
        When I say CSS3, I mean
        it. jQuery supports the ~ selector,
        :not(expr), attributes via [@
        attr=’whatever’].
        XPath support is a bit more
        limited, but most of the good
        stuff is here. The / and // operators
        are available, as are parent
        and preceding sibling axes. jQuery
        supports :first, :last, and :eq(n), a
        slimmed down version of [position()
        = n].
        Finally, jQuery supports testing
        for contained elements via [tag-
        Name]. And because the jQuery
        parses operates on XHTML, it can
        be easily co-opted for parsing raw
        XML from AJAX requests.
        And of course, jQuery has the
        full complement of AJAX methods
        through $.ajax, and $().load.
        </p>