At its very basic level, JTAG is a standardized serial protocol. You can build one out of a handful of components for under $20, but it will be slow. Generally speaking the more expensive ones offer higher speed, broader voltage support and even autonomous operation. The software used to drive the particular JTAG interface determines whether you will be able to program the devices you are interested in.
Personally I am happy with the $70ish dollar Olimex JTAG units. They are USB, based on the FT2232, work with 5V and 3.3V devices and have good support for both Linux and Windows (I'm not sure about OSX). I also have an Atmel USB Blaster for programming Altera FPGAs (supports down to 1.0V IO) and an older USB based one for Xilinx devices. Finally, I also have a GNICE+ JTAG adapter used primarily for Analog Devices Blackfin processors.
I have not tried it, but I believe that the Altera USB Blaster should work for anything I connect to, although it does not support RTCK (return clock) support. It is primiarly ARM devices which support RTCK, which is a means for the JTAG interface to detect how fast the JTAG clock can go and still be reliable.
My suggestion is to take a look at the particular devices you wish to use and see if you can find a common JTAG unit that is well supported by all.