Jak zaktualizować (dołączyć do) href w jQuery?

79

Mam listę linków, które prowadzą do interfejsu API map Google.

łącza mają już parametr daddr(miejsce docelowe) jako statyczne. Używam funkcji Geo-Location, aby znaleźć pozycję użytkowników i chcę dodać saddr(adres źródłowy) do łączy, gdy otrzymam dane.

więc w zasadzie będę musiał dodać coś takiego &saddr=50.1234567,-50.03452na końcu wszystkich linków prowadzących do map Google

Wszystkie linki mają klasę o nazwie directions-link

iz tej strony dowiedziałem się, jak je zmienić:

$("a.directions-link").attr("href", "http://www.google.com/");

Jednak chcę tylko dodać swoją wartość na końcu href bez zmiany tego, czym już jest href.

Jak mogę to zrobić?

JD Isaacks
źródło

Odpowiedzi:

149
var _href = $("a.directions-link").attr("href");
$("a.directions-link").attr("href", _href + '&saddr=50.1234567,-50.03452');

Aby zapętlić z each()

$("a.directions-link").each(function() {
   var $this = $(this);       
   var _href = $this.attr("href"); 
   $this.attr("href", _href + '&saddr=50.1234567,-50.03452');
});
Gabe
źródło
Dziękuję, czy to zadziała, jeśli jest więcej niż 1 link do kierunków, wszystkie z różnymi atrybutami href? Dziękuję Ci!
JD Isaacks
Jeśli dodajesz to samo do każdego wystąpienia, a.directions-linkto tak. W przeciwnym razie, jeśli dodajesz inną wartość do każdego elementu href, będziesz musiał użyć znaku, each()aby wykonać iterację i dołączyć odpowiednią wartość.
Gabe
Dołączam tę samą wartość, ale każdy href jest inny na początku. więc jeśli pierwszy to one.html, a drugi to two.html, oba kończą się jako one.html & saddr ... ponieważ przechwytuje on tylko href pierwszego łącza a.directions i używa go do wszystkich. Więc myślę, że muszę użyć każdego (). Czy chcesz się zastanawiać nad wykorzystaniem tego? Dzięki!!
JD Isaacks
Tak, potrzebowałem pętli, dzięki! :)
JD Isaacks
41

jQuery 1.4 ma nową funkcję, która to robi, i to rządzi. Zapomniałem, jak to się nazywa, ale używasz tego w ten sposób:

$("a.directions-link").attr("href", function(i, href) {
  return href + '?q=testing';
});

To również zapętla wszystkie elementy, więc nie ma potrzeby używania $ .each

zaius
źródło
4
To nie zadziałało, ale zadziałało .attr('href', function(i) { return $(this).attr('href') + '?q=testing'; }).
Elbert Alias
3
@elfbertf to działa dla mnie. Czy używasz jquery> = 1.4? Czy dołączyłeś zmienną href jako drugi argument?
zaius,
$ ("# kalkulator"). attr ("href", function (i, href) {return href + '? ves =' + 23 + '& v =' + 'sdfds';}); nie działa
des1roer
Testując to na jsfiddle.net/qz9eLr2z , działa. api.jquery.com/attr/#attr-attributeName-function mówi, że zostało to dodane w jQuery 1.1.
Jacob C.
1
@JacobC. Zezwalanie attr na przyjmowanie funkcji zostało dodane w 1.1, ale przekazanie bieżącej wartości, ponieważ drugi parametr został dodany w 1.4. Oto przykład tego, że nie działa w jquery 1.3 jsfiddle.net/qz9eLr2z/1
zaius
2
$("a.directions-link").attr("href", $("a.directions-link").attr("href")+"...your additions...");
Diodeus - James MacFarlane
źródło
1
To jest źle. Stosuje href z pierwszego dopasowanego ".directions-link" do wszystkich odnośników tej klasy. jsfiddle.net/yuezewaw
Jacob C.
-1

Oto, co próbowałem zrobić, aby dodać parametr w adresie URL, który zawiera określony znak w adresie URL.

jQuery('a[href*="google.com"]').attr('href', function(i,href) {
        //jquery date addition
        var requiredDate = new Date();
        var numberOfDaysToAdd = 60;
        requiredDate.setDate(requiredDate.getDate() + numberOfDaysToAdd); 
        //var convertedDate  = requiredDate.format('d-M-Y');
        //var newDate = datepicker.formatDate('yy/mm/dd', requiredDate );
        //console.log(requiredDate);

        var month   = requiredDate.getMonth()+1;
        var day     = requiredDate.getDate();

        var output = requiredDate.getFullYear() + '/' + ((''+month).length<2 ? '0' : '') + month + '/' + ((''+day).length<2 ? '0' : '') + day;
        //

Przykład roboczy Kliknij

Bikram Shrestha
źródło
1
Jaki jest cel tego wpisu? Czy to jest pytanie czy odpowiedź? A może po prostu dziwny komentarz? Jeśli to później, publikujesz w złym miejscu. ;-)
Phill Healey
Utworzyłem próbkę demo w jsfiddle, ale link był nieprawidłowy. Teraz wskazuje na prawy adres URL.
Bikram Shrestha
Twoja „odpowiedź” nie ma sensu, w rzeczywistości jest to bardziej dziwaczne stwierdzenie.
Phill Healey,