А, так вот оно как, надо было экранировать только спец-вопрос. Я так делал, ну, по аналогии, есть у меня похожие варианты в кодах, но забил и амперсанд обратным слешем и ничего не менялось. Ну то есть я делал похоже. Это одуреть можно всматриваться в эти черточки и буквочки, ну ладно, запишу и это на всякий случай.
Функция получилась все равно уродской.
table.addEventListener("click",function(e){
var row=e.target.parentNode;
if(!row.parentNode.nodeName.match(/tbody/i)) { // эта рега была давно
e.preventDefault();
return false;
}
var id=row.id.replace(/\D/g,\'\'); // эту регу я тоже надыбал
if(location.search.length<2)
location.assign(location.href+\'?id=\'+id);
else if(location.search.match(/(\W)(id=)\d+/))
location.assign(location.href.replace(/(\W)(id=)\d+/,\'$1$2\'+id))
else
location.assign(location.href+\'&id=\'+id)
});
Потому что получается что search может не быть - бНОПНЯ (то есть ?), search может быть и там может не быть id, search может быть и там может быть id. Блеать! На php я написал класс Get с ладонь размером, который генерит что хочешь get->id(31)->pid(999)->on('dd')->article(null)->page(2) // и все это можно прямо в строку воткнуть, __toString() выведет нормальный урл. Вызов типа article(null) это значит надо убить такой аргумент в урле.
Ну вот, неужели думаю придется разбирать эту хрень на js, ну понятно что в принципе там ничего сложного, но опять эти циклы, сбор-разбор и все ради одного id.