Wie aktualisiere ich eine href in jquery?

79

Ich habe eine Liste von Links, die alle zu einer Google Maps-API führen.

Die Links enthalten bereits den daddrParameter (Ziel) als statisch. Ich verwende Geo-Location, um die Position des Benutzers zu ermitteln, und möchte die saddr(Quelladresse) zu den Links hinzufügen, sobald ich die Daten erhalten habe.

Im Grunde muss ich so etwas wie &saddr=50.1234567,-50.03452am Ende aller Links hinzufügen, die auf Google Maps verweisen

Alle Links haben eine Klasse namens directions-link

und von dieser Seite habe ich herausgefunden, wie man sie ändert:

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

Ich möchte meinen Wert jedoch nur an das Ende der href anhängen, ohne zu ändern, was die href bereits ist.

Wie kann ich das machen?

JD Isaacks
quelle

Antworten:

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

Zum Schleifen mit each()

$("a.directions-link").each(function() {
   var $this = $(this);       
   var _href = $this.attr("href"); 
   $this.attr("href", _href + '&saddr=50.1234567,-50.03452');
});
Gabe
quelle
Vielen Dank, wird dies funktionieren, wenn es mehr als 1 Wegbeschreibung gibt, alle mit unterschiedlichen hrefs? Vielen Dank!
JD Isaacks
Wenn Sie für jede Instanz von a.directions-linkdann dasselbe anhängen, ja. Wenn Sie andernfalls an jeden href einen anderen Wert each()anhängen , müssen Sie einen verwenden , um den jeweiligen Wert zu iterieren und anzuhängen.
Gabe
Ich füge den gleichen Wert hinzu, aber jeder href ist zunächst anders. Wenn also die erste one.html und die zweite two.html ist, sind beide one.html & saddr ... weil nur die href des ersten a.directions-Links erfasst und für alle verwendet wird. Also denke ich, ich muss jedes () verwenden. Möchtest du darüber nachdenken? Vielen Dank!!
JD Isaacks
Ja, die Schleife ist das, was ich brauchte. Danke! :)
JD Isaacks
41

jQuery 1.4 verfügt über eine neue Funktion, die dies regelt. Ich habe vergessen, wie es heißt, aber Sie verwenden es so:

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

Das durchläuft auch alle Elemente, sodass $ .each nicht erforderlich ist

Zaius
quelle
4
Das hat bei mir nicht funktioniert, aber .attr('href', function(i) { return $(this).attr('href') + '?q=testing'; })funktioniert.
Elbert Alias
3
@elfbertf es funktioniert bei mir. Verwenden Sie jquery> = 1.4? Und haben Sie die Variable href als zweites Argument angegeben?
Zaius
$ ("# calculator"). attr ("href", Funktion (i, href) {return href + '? ves =' + 23 + '& v =' + 'sdfds';}); nicht funktionieren
des1roer
Wenn Sie dies unter jsfiddle.net/qz9eLr2z testen , funktioniert es. api.jquery.com/attr/#attr-attributeName-function sagt, dass dies in jQuery 1.1 hinzugefügt wurde.
Jacob C. sagt Reinstate Monica
1
@ JacobC. Das Zulassen, dass attr eine Funktion übernimmt, wurde in 1.1 hinzugefügt, aber das Übergeben des aktuellen Werts als zweiter Parameter wurde in 1.4 hinzugefügt. Hier ist ein Beispiel dafür, dass es in jquery 1.3 nicht funktioniert. Jsfiddle.net/qz9eLr2z/1
zaius
2
$("a.directions-link").attr("href", $("a.directions-link").attr("href")+"...your additions...");
Diodeus - James MacFarlane
quelle
1
Das ist falsch. Es wendet die href vom ersten übereinstimmenden ".directions-Link" auf alle Links dieser Klasse an. jsfiddle.net/yuezewaw
Jacob C. sagt Reinstate Monica
-1

Hier ist, was ich versucht habe, um Parameter in die URL einzufügen, die das spezifische Zeichen in der URL enthalten.

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;
        //

Arbeitsbeispiel Klicken Sie auf

Bikram Shrestha
quelle
Was ist der Zweck dieses Beitrags? Ist das eine Frage oder eine Antwort? Oder nur ein merkwürdiger Kommentar? Wenn es das spätere ist, posten Sie am falschen Ort. ;-)
Phill Healey
Ich habe das Demo-Beispiel in jsfiddle erstellt, aber der Link war falsch. Jetzt zeigt es auf die richtige URL.
Bikram Shrestha
Ihre 'Antwort' macht keinen Sinn, es ist eigentlich eher eine bizarre Aussage.
Phill Healey