locationを画面遷移させずに変更したい時

無理です、諦めましょう。

唯一例外的に可能なのはlocation.hashのみです。
(http://example.com/index.php#topの「#top」の部分)

しかしこれで良いなら、GETパラメータのようにhashを使うという荒業もあります。

参考:
https://developer.mozilla.org/ja/docs/Web/API/Window/location
>location オブジェクトのプロパティが変更されるときはいつでも、文書は、window.location.assign() が変更された URL を引数にして呼び出されたときのように、URL を読み込みます。