2011-06-30 80 views
10

Làm cách nào để viết lại giá trị href, bằng cách sử dụng jQuery?Thay đổi giá trị href bằng cách sử dụng jQuery

Tôi có mối liên hệ với một thành phố mặc định

<a href="/search/?what=parks&city=Paris">parks</a> 
<a href="/search/?what=malls&city=Paris">malls</a> 

Nếu người dùng nhập vào một giá trị vào một textbox #city Tôi muốn thay thế Paris với giá trị do người dùng nhập vào.

Cho đến nay tôi có

var newCity = $("#city").val(); 
+0

tôi sẽ khuyên bạn nên làm này với các biểu mẫu, bởi vì cách bạn đang làm nó bây giờ làm cho chức năng tìm kiếm của bạn không sử dụng được nếu không có javascript. – Kokos

Trả lời

28

Với bạn phải độc đáo href giá trị (?what=parks, và ?what=malls) Tôi xin đề nghị không viết một đường dẫn vào các phương pháp $.attr(); bạn sẽ phải có một cuộc gọi đến $.attr() cho mỗi href duy nhất và điều đó sẽ phát triển rất thừa, rất nhanh chóng - chưa kể đến khó quản lý.

Dưới đây tôi đang thực hiện một cuộc gọi đến $.attr() và sử dụng chức năng để chỉ thay thế phần &city= với thành phố mới. Điều tốt về phương pháp này là 5 dòng mã này có thể cập nhật hàng trăm liên kết mà không phá hủy phần còn lại của giá trị href trên mỗi liên kết.

$("#city").change(function(o){ 
    $("a.malls").attr('href', function(i,a){ 
    return a.replace(/(city=)[a-z]+/ig, '$1'+o.target.value); 
    }); 
}); 

Một điều bạn có thể muốn xem là không gian và vỏ. Bạn có thể chuyển đổi tất cả mọi thứ để chữ thường sử dụng phương pháp Javascript .toLowerCase(), và bạn có thể thay thế không gian với một cuộc gọi đến .replace() như tôi đã xuống dưới đây:

'$1'+o.target.value.replace(/\s+/, ''); 

Demo Online: http://jsbin.com/ohejez/

+1

tại sao sử dụng cụm từ thông dụng khi bạn không phải làm như vậy? sẽ không phải là kỹ thuật chậm hơn và err ... clunkier? – AndyL

+3

@AndyL Vì ngày mai URL có thể không phải là '/ search /? What = parts & city = Paris', nhưng thay vào đó'/search /? When = afternoon & what = park & ​​city = Paris' hoặc một số biến thể khác. Bạn không cần phải đi và viết lại JavaScript của bạn để phù hợp với những loại thay đổi đó; nó sẽ quá nặng nề, theo ý kiến ​​chân thành của tôi. – Sampson

+0

điểm hợp lệ, mặc dù nó chắc chắn phụ thuộc vào ứng dụng. – AndyL

2

Như thế này:

var newCity = $("#city").val(); 

$('a').attr('href', '/search/?what=parks&city=' + newCity); 

EDIT: gia tăng chuỗi tìm kiếm

+4

Điều này sẽ thay thế toàn bộ URL, không chỉ giá trị của tham số 'city'. –

+0

Cảm ơn, tôi khá chắc chắn OP sẽ tìm ra điều đó. – Phil

14
$('a').attr("href", "/search/?what=parks&city=" + newCity); 
4

Ngay sau khi một phím được nhả trong #city trường nhập, số href sẽ được cập nhật d.

$('#city').keyup(function(){ 

    $('a').attr('href','/search/?what=parks&city='+$(this).val()); 

}); 
+0

Đây là giải pháp tốt nhất. – Phil

+0

cảm ơn !! tốt nhất. Mặc dù tôi đã thực hiện một số thay đổi ... Tôi đã thêm "onkeyup" gọi lại vào "đầu vào". giống như và trong hàm gọi lại này tôi đã thêm mã. Cảm ơn !! – OhadR

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