2013-01-13 7 views
5

Powiel możliwe:
Change href parameter using jQueryjQuery zastępuje wartość href, ale tylko częściowo?

Mam stronę z kilkoma linkami tak:

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

Więc po stronie PHP ładunku będzie wyglądać następująco:

<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"> 
... 

Chcę częściowo zmienić href o wartości sl wszystkich połączeń przy użyciu jQuery (wartość SL zbierane z suwakiem = data.value)

mam to:

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

I teraz nie wiem wiem jak używać zamieniać na wyrażenia regularne, ponieważ myślę, że jest to rozwiązanie!

+0

Twój pierwszy link, jest to coraz drukiem przez pętlę? –

Odpowiedz

7

Można zrobić

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

zastąpić wartość sl przez 'newval'.

Można również użyć funkcji do zbudowania nowej wartości. Na przykład, że chcesz, aby pomnożyć przez 2 starą wartość SL, można to zrobić:

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

Można nawet unikać each:

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

Demonstration (nad łącza, aby zobaczyć href)

+0

tak wielki dystroy! ... działa świetnie. A także wielkie podziękowania za dodatkową funkcję pokazaną tutaj, mogą być również przydatne dla mojego projektu. Dzięki! –

+0

@PedroP Zobacz także trzecie rozwiązanie, które dałem, unikając każdego. –

+0

. Ty ponownie dystroy, czy uważasz, że lepiej jest użyć tego trzeciego rozwiązania zamiast tego w drugą stronę? –

2

Spróbuj tego, długiego kodu dla zrozumienia ...

$('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); 
}); 

Korzystanie 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

Jak o użyciu przeciążenie attr które ma funkcję callback:

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

Wewnątrz funkcji, this jest równa aktualnej <a> tagu, więc można określić, jakie wartość do wykorzystania tam.

Przykład:http://jsfiddle.net/6zAN7/5/