Wie können Sie die href für einen Hyperlink mit jQuery ändern?
Wie können Sie die href für einen Hyperlink mit jQuery ändern?
Antworten:
Verwenden von
$("a").attr("href", "http://www.google.com/")
ändert die href aller Hyperlinks so, dass sie auf Google verweisen. Sie möchten wahrscheinlich einen etwas verfeinerten Selektor. Wenn Sie beispielsweise eine Mischung aus Anker-Tags für Linkquelle (Hyperlink) und Linkziel (auch als "Anker" bezeichnet) haben:
<a name="MyLinks"></a>
<a href="http://www.codeproject.com/">The CodeProject</a>
... Dann möchten Sie ihnen wahrscheinlich nicht versehentlich href
Attribute hinzufügen . Aus Sicherheitsgründen können wir dann festlegen, dass unser Selektor nur übereinstimmt<a>
Tags mit einem vorhandenen href
Attribut abgleichen soll:
$("a[href]") //...
Natürlich haben Sie wahrscheinlich etwas Interessanteres im Sinn. Wenn Sie einen Anker mit einem bestimmten vorhandenen Anker abgleichen möchtenhref
, können Sie Folgendes verwenden:
$("a[href='http://www.google.com/']").attr('href', 'http://www.live.com/')
Hier finden Sie Links, bei denen href
die Zeichenfolge genau mit der Zeichenfolge übereinstimmt http://www.google.com/
. Eine komplexere Aufgabe könnte darin bestehen, nur einen Teil der Aufgabe zu aktualisieren und dann zu aktualisierenhref
:
$("a[href^='http://stackoverflow.com']")
.each(function()
{
this.href = this.href.replace(/^http:\/\/beta\.stackoverflow\.com/,
"http://stackoverflow.com");
});
Der erste Teil wählt nur Links , wo die href beginnt mit http://stackoverflow.com
. Anschließend wird eine Funktion definiert, die einen einfachen regulären Ausdruck verwendet, um diesen Teil der URL durch einen neuen zu ersetzen. Beachten Sie die Flexibilität, die Sie dadurch erhalten. Hier können Sie jede Art von Änderung am Link vornehmen.
each
möchte ich hinzufügen, dass seit jQuery 1.4 für das letzte Beispiel keine Verwendung erforderlich ist - Folgendes wäre jetzt möglich:$(selector).attr('href', function() { return this.replace(/.../, '...'); });
href
: ...return this.href.replace(/.../, '...'); });
Mit jQuery 1.6 und höher sollten Sie Folgendes verwenden:
$("a").prop("href", "http://www.jakcms.com")
Der Unterschied zwischen prop
und attr
besteht darin, dass attr
das HTML-Attribut während erfasst wirdprop
erfasst die DOM-Eigenschaft erfasst wird.
Weitere Details finden Sie in diesem Beitrag: .prop () vs .attr ()
prop
over verwenden sollten, attr
wäre dankbar, wenn Leute auf die Frage kommen und feststellen attr
, dass sie in neueren jQuery-Versionen anscheinend einwandfrei funktionieren ...
prop
ist schneller als attr
weil es den dom aktualisiert, anstatt den HTML- Code zu ändern . jsfiddle.net/je4G5
Verwenden Sie die attr
Methode bei Ihrer Suche. Sie können jedes Attribut mit einem neuen Wert austauschen.
$("a.mylink").attr("href", "http://cupcream.com");
Abhängig davon, ob Sie alle identischen Links zu etwas anderem ändern möchten oder nur die in einem bestimmten Abschnitt der Seite oder jeweils einzeln steuern möchten, können Sie einen dieser Schritte ausführen.
Ändern Sie alle Links zu Google so, dass sie auf Google Maps verweisen:
<a href="http://www.google.com">
$("a[href='http://www.google.com/']").attr('href',
'http://maps.google.com/');
Um Links in einem bestimmten Abschnitt zu ändern, fügen Sie die Klasse des Container-Div zum Selektor hinzu. In diesem Beispiel wird der Google-Link im Inhalt geändert, jedoch nicht in der Fußzeile:
<div class="content">
<p>...link to <a href="http://www.google.com/">Google</a>
in the content...</p>
</div>
<div class="footer">
Links: <a href="http://www.google.com/">Google</a>
</div>
$(".content a[href='http://www.google.com/']").attr('href',
'http://maps.google.com/');
Um einzelne Links zu ändern, unabhängig davon, wo sie in das Dokument fallen, fügen Sie dem Link eine ID hinzu und fügen Sie diese ID dann dem Selektor hinzu. In diesem Beispiel wird der zweite Google-Link im Inhalt geändert, nicht jedoch der erste oder der in der Fußzeile:
<div class="content">
<p>...link to <a href="http://www.google.com/">Google</a>
in the content...</p>
<p>...second link to <a href="http://www.google.com/"
id="changeme">Google</a>
in the content...</p>
</div>
<div class="footer">
Links: <a href="http://www.google.com/">Google</a>
</div>
$("a#changeme").attr('href',
'http://maps.google.com/');
Obwohl das OP explizit nach einer jQuery-Antwort gefragt hat, müssen Sie jQuery heutzutage nicht für alles verwenden.
Wenn Sie den href
Wert aller <a>
Elemente ändern möchten , wählen Sie sie alle aus und durchlaufen Sie dann die Knotenliste : (Beispiel)
var anchors = document.querySelectorAll('a');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
Wenn Sie den href
Wert aller <a>
Elemente ändern möchten, die tatsächlich ein href
Attribut haben, wählen Sie sie aus, indem Sie den [href]
Attributselektor ( a[href]
) hinzufügen : (Beispiel)
var anchors = document.querySelectorAll('a[href]');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
Wenn Sie beispielsweise den href
Wert von <a>
Elementen ändern möchten , die einen bestimmten Wert enthaltengoogle.com
, verwenden Sie die Attributauswahl a[href*="google.com"]
: (Beispiel)
var anchors = document.querySelectorAll('a[href*="google.com"]');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
Ebenso können Sie auch die anderen Attributselektoren verwenden . Zum Beispiel:
a[href$=".png"]
könnte verwendet werden, um <a>
Elemente auszuwählen , deren href
Wert mit endet .png
.
a[href^="https://"]
werden könnte , auszuwählen , die verwendeten <a>
Elemente mit href
Werten , die sie voran mit https://
.
Wenn Sie den href
Wert von <a>
Elementen ändern möchten , die mehrere Bedingungen erfüllen: (Beispiel)
var anchors = document.querySelectorAll('a[href^="https://"], a[href$=".png"]');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
..keine Notwendigkeit für Regex, in den meisten Fällen.
Dieses Snippet wird aufgerufen, wenn auf einen Link der Klasse 'menu_link' geklickt wird, und zeigt den Text und die URL des Links an. Die Rückgabe false verhindert, dass dem Link gefolgt wird.
<a rel='1' class="menu_link" href="option1.html">Option 1</a>
<a rel='2' class="menu_link" href="option2.html">Option 2</a>
$('.menu_link').live('click', function() {
var thelink = $(this);
alert ( thelink.html() );
alert ( thelink.attr('href') );
alert ( thelink.attr('rel') );
return false;
});
Der einfache Weg dazu ist:
Attr-Funktion (seit jQuery Version 1.0)
$("a").attr("href", "https://stackoverflow.com/")
oder
Prop-Funktion (seit jQuery Version 1.6)
$("a").prop("href", "https://stackoverflow.com/")
Der oben beschriebene Vorteil besteht auch darin, dass, wenn der Selektor einen einzelnen Anker auswählt, nur dieser Anker aktualisiert wird und wenn der Selektor eine Gruppe von Ankern zurückgibt, die spezifische Gruppe nur über eine Anweisung aktualisiert wird.
Nun gibt es viele Möglichkeiten, den genauen Anker oder die Gruppe von Ankern zu identifizieren:
Ganz einfache:
$("a")
$("a:eq(0)")
active
):$("a.active")
profileLink
ID):$("a#proileLink")
$("a:first")
Weitere nützliche:
$("[href]")
$("a[href='www.stackoverflow.com']")
$("a[href!='www.stackoverflow.com']")
$("a[href*='www.stackoverflow.com']")
$("a[href^='www.stackoverflow.com']")
$("a[href$='www.stackoverflow.com']")
Wenn Sie nun bestimmte URLs ändern möchten, können Sie dies wie folgt tun:
Wenn Sie beispielsweise eine Proxy-Website für alle URLs zu google.com hinzufügen möchten, können Sie diese wie folgt implementieren:
$("a[href^='http://www.google.com']")
.each(function()
{
this.href = this.href.replace(/http:\/\/www.google.com\//gi, function (x) {
return "http://proxywebsite.com/?query="+encodeURIComponent(x);
});
});
Stoppen Sie die Verwendung von jQuery nur deswegen! Dies ist nur mit JavaScript so einfach.
document.querySelector('#the-link').setAttribute('href', 'http://google.com');
Wenn Sie das ShortCode Exec PHP-Plugin installieren, können Sie diesen Shortcode erstellen, den ich myjavascript nannte
?><script type="text/javascript">
jQuery(document).ready(function() {
jQuery("div.fusion-logo a").attr("href","tel:303-985-9850");
});
</script>
Sie können jetzt zu Darstellung / Widgets gehen und einen der Fußzeilen-Widget-Bereiche auswählen und mithilfe eines Text-Widgets den folgenden Shortcode hinzufügen
[myjavascript]
Die Auswahl kann sich ändern, je nachdem, welches Bild Sie verwenden und ob es für die Netzhaut bereit ist. Sie können es jedoch jederzeit mithilfe von Entwicklertools herausfinden.
href
in einem Attribut, damit Sie es mit reinem JavaScript ändern können, aber wenn Sie bereits jQuery in Ihre Seite eingefügt haben, machen Sie sich keine Sorgen, ich werde es in beide Richtungen zeigen:
Stellen Sie sich vor, Sie haben href
Folgendes:
<a id="ali" alt="Ali" href="http://dezfoolian.com.au">Alireza Dezfoolian</a>
Und Sie möchten den Link ändern ...
Mit reinem JavaScript ohne Bibliothek können Sie Folgendes tun:
document.getElementById("ali").setAttribute("href", "https://stackoverflow.com");
Aber auch in jQuery können Sie Folgendes tun:
$("#ali").attr("href", "https://stackoverflow.com");
oder
$("#ali").prop("href", "https://stackoverflow.com");
In diesem Fall, wenn Sie bereits jQuery injiziert haben, sieht jQuery wahrscheinlich kürzer und browserübergreifender aus ... aber ansonsten gehe ich mit dem JS
einen ...