you might consider creating array of the state/zip/city first, then populate the options when other select is changed.
The main reason is you can't hide options in IE, so they have to be removed from select to filter them.Putting them into html first is backwards a bit
Alternately you could use the state as a class, remove all the options to a stored variable and then filter that variable by state class to insert them into select as needed
To parse the values as shown use split('|') to create array of [state,zip]