Thực ra đây là hoàn toàn tầm thường, bởi vì đối tượng vị trí javascript đã giao dịch với điều này. Chỉ cần đóng gói này một lót vào một chức năng để tái sử dụng nó với các liên kết vv:
<script>
function addParam(v) {
window.location.search += '&' + v;
}
</script>
<a href="javascript:addParam('priceMin=300');">add priceMin=300</a>
Không cần để kiểm tra ?
như thế này đã là phần search
và bạn chỉ cần thêm param.
Nếu bạn không muốn thậm chí tận dụng một chức năng bạn có thể viết như vậy:
<a href="javascript:location.search+='&priceMin=300';">add priceMin=300</a>
Hãy ghi nhớ rằng đây thực hiện chính xác những gì bạn đã yêu cầu: Để thêm rằng tham số cụ thể. Nó có thể là một phần của phần search
vì bạn có thể có cùng một thông số nhiều lần trong một URI. Bạn có thể muốn bình thường hóa trong ứng dụng của mình, nhưng đó là một trường khác. Tôi sẽ tập trung hóa việc bình thường hóa URL thành một chức năng của chính nó.
Edit:
Trong cuộc thảo luận về các câu trả lời được chấp nhận ở trên nó trở nên rõ ràng, rằng các điều kiện sau đây cần được đáp ứng để có được một hàm làm việc:
- nếu tham số đã tồn tại thì nên bị thay đổi.
- nếu thông số đã tồn tại nhiều lần, chỉ bản sao đã thay đổi mới có thể tồn tại.
- nếu thông số đã tồn tại, nhưng không có giá trị, giá trị phải được đặt.
Như search
đã cung cấp các chuỗi tìm kiếm, điều duy nhất còn lại để đạt được là để phân tích một phần truy vấn-info vào tên và giá trị cặp, thay đổi hoặc thêm tên mất tích và giá trị và sau đó thêm nó trở lại search
:
<script>
function setParam(name, value) {
var l = window.location;
/* build params */
var params = {};
var x = /(?:\??)([^=&?]+)=?([^&?]*)/g;
var s = l.search;
for(var r = x.exec(s); r; r = x.exec(s))
{
r[1] = decodeURIComponent(r[1]);
if (!r[2]) r[2] = '%%';
params[r[1]] = r[2];
}
/* set param */
params[name] = encodeURIComponent(value);
/* build search */
var search = [];
for(var i in params)
{
var p = encodeURIComponent(i);
var v = params[i];
if (v != '%%') p += '=' + v;
search.push(p);
}
search = search.join('&');
/* execute search */
l.search = search;
}
</script>
<a href="javascript:setParam('priceMin', 300);">add priceMin=300</a>
này ít nhất là một chút mạnh mẽ hơn vì nó có thể đối phó với URL như thế này:
test.html?a?b&c&test=foo&priceMin=300
Hoặc thậm chí:
test.html?a?b&c&test=foo&pri%63eMin=300
Ngoài ra, tên và giá trị được thêm vào luôn được mã hóa chính xác. Trường hợp này có thể thất bại là nếu một tên tham số dẫn đến một nhãn thuộc tính js bất hợp pháp.
Bất kỳ lý do bạn không thể tạo ra các liên kết server-side hoặc sử dụng một hình thức web? – zzzzBov
Tôi đồng ý với @zzzzBov, sau đó bạn có thể biến bộ lọc giá tối thiểu của mình thành liên kết động. – iLLin
Có quá nhiều bộ lọc trên trang web của tôi như tên thương hiệu, phạm vi giá, sắp xếp theo mức độ phổ biến, sắp xếp theo giá và nhiều loại khác. Để tạo ra URL trên phía máy chủ cần rất nhiều câu lệnh 'if-else' và sẽ tạo ra các tải không cần thiết trên máy chủ. Tôi đặc biệt đang tìm kiếm thay đổi URL ở phía khách hàng. Cảm ơn! –