One downside is that server side controls can get renamed, depending on their containers. For example, you might have:
<asp:panel id="panel1" runat="server"></asp:panel>
This may be rendered to the page as:
<div id="ctl00$panel1"></div>
So if you write jQuery using $('#panel1')
as a selector, it won't work. The way around this is to generate the id dynamically, eg:
Dim js as String = "$('" & panel1.ClientID & "').whatever();"
This can make the javascript a bit unreadable, but it does work quite well. I work on a large web app using this method, and jQuery has saved us a TON of time, not to mention making the site look and work much better.