2013-01-13 42 views
5

thể trùng lặp:
Change href parameter using jQueryjQuery thay thế giá trị href nhưng chỉ một phần?

Tôi có một trang với một số liên kết như thế này:

<a href="playcats.php?cat='.$catname.'&sl=10" class="golink"> 

Vì vậy, sau khi tải trang PHP nó sẽ trông giống như:

<a href="playcats.php?cat=blue&sl=10" class="golink"> 
<a href="playcats.php?cat=red&sl=10" class="golink"> 
<a href="playcats.php?cat=yellow&sl=10" class="golink"> 
... 

Tôi muốn một phần thay đổi href cho giá trị sl của tất cả các liên kết sử dụng jQuery (giá trị sl được chọn từ một thanh trượt = data.value)

tôi đã này:

$(document).ready(function() { 
    $('a.golink').each(function() { 
    var _href = $(this).attr('href'); 
    $(this). (rest of code..) 
    }); 
}); 

Và bây giờ tôi không biết cách sử dụng thay thế bằng cụm từ thông dụng như tôi nghĩ đó là giải pháp!

+0

liên kết đầu tiên của bạn, là nó nhận được in thông qua một vòng lặp? –

Trả lời

7

Bạn có thể làm

$(this).attr('href', _href.replace(/sl=[^&]+/, 'sl=newval')); 

để thay thế giá trị của sl bởi 'newval'.

Bạn cũng có thể sử dụng hàm để tạo giá trị mới. Ví dụ, nói rằng bạn muốn nhân với 2 giá trị sl cũ, bạn có thể làm điều này:

$(this).attr('href', _href.replace(/sl=([^&]+)/, function(_, oldval) { 
     return 'sl='+(2*parseInt(oldval,10)) 
})); 

Bạn thậm chí có thể tránh sử dụng each:

$('a.golink').attr('href', function(i, v){ 
    return v.replace(/sl=([^&]+)/, function(_, oldval) { 
     return 'sl='+(2*parseInt(oldval,10)) 
    }) 
}); 

Demonstration (qua các liên kết để xem href)

+0

dystroy tuyệt vời! ... hoạt động hoàn hảo. Và cũng cảm ơn rất nhiều cho các chức năng bổ sung cho thấy ở đây, cũng có thể hữu ích cho dự án của tôi. Cảm ơn !! –

+0

@PedroP Xem thêm giải pháp thứ ba tôi đã đưa ra, tránh từng giải pháp. –

+0

ty một lần nữa dystroy, bạn có tin là tốt hơn để sử dụng giải pháp thứ ba này thay vì mỗi cách? –

2

Hãy thử điều này, mã dài cho sự hiểu biết ...

$('a').each(function(){ 
    // Change this to get slider value 
    slider_value = 25; 

    var _href = $(this).attr('href'); 
    _href = _href.split("&"); 
    _href[_href.length] = "sl=" + slider_value; 
    _href = _href.join("&"); 

    console.log(_href); 
}); 

Sử dụng regex:

$('a').each(function(){ 
    // Change this to get slider value 
    slider_value = 25; 

    var _href = $(this).attr('href'); 
    _href = _href.replace(/sl=[^&]+/, 'sl=' + slider_value); 
}); 
3

Làm thế nào về việc sử dụng quá tải của attr mà phải mất một chức năng gọi lại:

$("a.golink").attr("href", function (_, val) { 
    return val.replace(/sl=\d+/gi, "sl=new_value"); 
}); 

Bên trong của hàm, this bằng với <a> thẻ hiện hành, vì vậy bạn có thể xác định những gì giá trị để sử dụng ở đó.

Ví dụ:http://jsfiddle.net/6zAN7/5/

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