Вам нужно использовать &
только при вводе необработанного HTML; браузер конвертирует &
в &
для вас.
Изменение
var text = 'gaiagps://map?lat=31.933&lng=-95.236&z=14';
в
var text = 'gaiagps://map?lat=31.933&lng=-95.236&z=14';
и ваши две функции должны делать то, что вы хотели.
Как добавление, в консоли браузера вы можете набрать
document.getElementsByTagName('p')[1].children[0].href
чтобы увидеть, что браузер преобразовал ваши `&` 'в амперсанды.