2012-05-02 30 views
8

Nếu tôi có một liên kết mà đã được thay đổi với chức năng history.pushState({}, "", link); nơi tôi link là ví dụ page.php?value=1&value2=2 Có cách nào để chỉ cần thay đổi value2 với pushState() chức năng thay vì thay đổi toàn bộ liên kết?history.pushState() truy vấn thay đổi giá trị

Trả lời

5

Nếu bạn đang cố gắng làm là thay đổi URL mà không cần thêm một mục nhập bổ sung cho đối tượng lịch sử, bạn có thể thử replaceState.

history.replaceState({value: 1, value2: X}, "title", "page.php"); 
+9

Điều này dường như không phải là câu trả lời. Việc chuyển đối tượng làm đối số đầu tiên cho 'replaceState' sẽ không ảnh hưởng đến các giá trị truy vấn trong URL. Chỉ đối số cuối cùng sẽ: Trong ví dụ này, nó sẽ xóa hoàn toàn truy vấn. –

+1

OP muốn cập nhật (thay vì tạo mới) một giá trị trong trạng thái lịch sử hiện tại. Trong khi bạn không thể sử dụng pushState để sửa đổi một đối tượng trạng thái, đó là mục đích của replaceState. – devstruck

2

Không, bởi vì chuỗi truy vấn là một phần của URL. Nếu bạn không thực sự cần phải vượt qua những giá trị cho các mục đích của máy chủ, bạn có thể đưa vào đối tượng trạng thái của lịch sử riêng của mình, và sau đó bạn có thể thay đổi chỉ là đối tượng trạng thái với pushState(). Ví dụ:

history.pushState({value: 1, value2: 2}, "Title", 'page.php'); 
history.pushState({value: 1, value2: 'new value'}, "Title"); 
3

Bạn có thể sử dụng chức năng này hữu ích để thay đổi một chuỗi truy vấn giá trị tham số:

function updateParam(url, param, value) 
{ 
    var re = new RegExp(param+"(.+?)(&|$)","g"); 

    return url.replace(re, param+'='+value) 
} 
+3

Dòng cuối cùng phải là 'url.replace (re, param + '=' + value + '$ 2')', phải không? Nếu không, bạn sẽ mất dấu phân cách và dấu. – Ricky

Các vấn đề liên quan