/* elem1.style.top uses em units */
elem2.style.top = parseInt(elem1.style.top, 10) + 1 + "em";
That is the behavior according to the standard. ECMA-262 section 188.8.131.52 states that
parseInt may interpret only a leading portion of string as an integer value; it ignores any characters that cannot be interpreted as part of the notation of an integer, and no indication is given that any such characters were ignored.
I'd be more worried that at some point in the future the units of
elem2.style.top will change. In that case, this code could be turning
200em, which could cause a great deal of confusion.