JQueryを使ってハイパーリンクのhrefをどのように変更できますか?
を使う
$("a").attr("href", "http://www.google.com/")
googleを指すようにすべてのハイパーリンクのhrefを変更します。あなたはおそらく多少洗練されたセレクターが欲しいです。たとえば、リンク元(ハイパーリンク)とリンク先(別名 "anchor")のアンカータグが混在しているとします。
<a name="MyLinks"></a>
<a href="http://www.codeproject.com/">The CodeProject</a>
...そして、あなたはおそらくhref
属性を誤ってそれらに追加したくないでしょう。安全のために、セレクタが既存のhref
属性を持つ<a>
タグにのみマッチするように指定することができます。
$("a[href]") //...
もちろん、もっとおもしろいことがあるでしょう。アンカーを既存の特定のhref
と一致させたい場合は、次のようにします。
$("a[href='http://www.google.com/']").attr('href', 'http://www.live.com/')
これはhref
が文字列http://www.google.com/
と完全に一致するリンクを見つけます。もっと複雑なタスクがマッチしているかもしれません、それからhref
の一部だけを更新します:
$("a[href^='http://stackoverflow.com']")
.each(function()
{
this.href = this.href.replace(/^http:\/\/beta\.stackoverflow\.com/,
"http://stackoverflow.com");
});
最初の部分は、href が で始まるリンク/ http://stackoverflow.com
だけを選択します。次に、URLのこの部分を新しいもので置き換えるために単純な正規表現を使用する関数が定義されています。これがあなたに与える柔軟性に注意してください - リンクへのどんな種類の修正もここでされることができました。
JQuery 1.6以上では次のものを使うべきです:
$("a").prop("href", "http://www.jakcms.com")
prop
とattr
の違いは、attr
はHTML属性を取得するのに対し、prop
はDOMプロパティを取得することです。
あなたはこの記事でより多くの詳細を見つけることができます: .prop()vs .attr()
ルックアップにattr
メソッドを使用してください。新しい値を使って任意の属性を切り替えることができます。
$("a.mylink").attr("href", "http://cupcream.com");
同一のリンクすべてを別のものに変更するのか、ページの特定のセクションにあるリンクのみを個別に制御するのか、またはそれぞれ個別に制御するのかに応じて、これらのいずれかを実行できます。
Googleマップを指すように、すべてのリンクをGoogleに変更します。
<a href="http://www.google.com">
$("a[href='http://www.google.com/']").attr('href',
'http://maps.google.com/');
特定のセクション内のリンクを変更するには、コンテナーdivのクラスをセレクターに追加します。この例では、コンテンツ内のGoogleリンクを変更しますが、フッター内のリンクは変更しません。
<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/');
リンクがドキュメント内のどこにあるかに関係なく、個々のリンクを変更するには、リンクにIDを追加してから、そのIDをセレクタに追加します。この例では、コンテンツ内の2番目のGoogleリンクが変更されますが、最初のリンクやフッター内のリンクは変更されません。
<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/');
OPがjQueryの回答を明示的に要求したとしても、最近すべてのものにjQueryを使用する必要はありません。
all<a>
要素のhref
の値を変更したい場合は、それらをすべて選択してから nodelist を繰り返します。 (例)
var anchors = document.querySelectorAll('a');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
実際にhref
属性を持つすべての<a>
要素のhref
値を変更したい場合は、[href]
属性セレクター(a[href]
)を追加してそれらを選択します。 (例)
var anchors = document.querySelectorAll('a[href]');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
含むである<a>
要素のhref
値を特定の値、例えばgoogle.com
に変更したい場合は、属性セレクタa[href*="google.com"]
: (例) を使用してください。
var anchors = document.querySelectorAll('a[href*="google.com"]');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
同様に、他の attributeセレクター も使用できます。例えば:
a[href$=".png"]
は、href
の値が<a>
で終わる.png
要素を選択するために使用できます。
a[href^="https://"]
は、<a>
を持つ接頭辞のhref
値を持つhttps://
要素を選択するために使用できます。
複数の条件を満たす<a>
要素のhref
値を変更したい場合: (例)
var anchors = document.querySelectorAll('a[href^="https://"], a[href$=".png"]');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
ほとんどの場合、正規表現は必要ありません。
このスニペットは、クラス 'menu_link'のリンクがクリックされたときに呼び出され、リンクのテキストとURLを表示します。戻り値falseはリンクをたどらないようにします。
<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;
});
そのためだけにjQueryを使用しないでください。これはJavaScriptだけでとても簡単です。
document.querySelector('#the-link').setAttribute('href', 'http://google.com');
簡単な方法は次のとおりです。
Attr関数 (jQueryバージョン1.0以降)
$("a").attr("href", "https://stackoverflow.com/")
または
Prop関数 (jQueryバージョン1.6以降)
$("a").prop("href", "https://stackoverflow.com/")
また、上記の方法の利点は、selectorが単一のアンカーを選択した場合はそのアンカーのみを更新し、selectorがアンカーのグループを返した場合は1つのステートメントのみを介して特定のグループを更新することです。
現在、正確なアンカーまたはアンカーのグループを識別する方法は多数あります。
非常に単純なもの:
$("a")
$("a:eq(0)")
active
を持つアンカーのみ):$("a.active")
profileLink
ID):$("a#proileLink")
$("a:first")
もっと便利なもの:
$("[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']")
今、あなたが特定のURLを修正したいならば、あなたはそれをすることができます:
たとえば、google.comに送信されるすべてのURLにプロキシWebサイトを追加する場合は、次のように実装します。
$("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);
});
});
$("a[href^='http://stackoverflow.com']")
.each(function()
{
this.href = this.href.replace(/^http:\/\/beta\.stackoverflow\.com/,
"http://stackoverflow.com");
});
ShortCode Exec PHPプラグインをインストールすると、myjavascriptと呼ばれるこのショートコードを作成できます。
?><script type="text/javascript">
jQuery(document).ready(function() {
jQuery("div.fusion-logo a").attr("href","tel:303-985-9850");
});
</script>
これで、Appearance/Widgetsに行き、フッターウィジェット領域の1つを選び、テキストウィジェットを使って次のショートコードを追加することができます。
[myjavascript]
セレクターはあなたが使用している画像とそれが網膜の準備ができているかどうかによって変わるかもしれませんが、あなたはいつでも開発者ツールを使ってそれを理解することができます。
属性にhref
を使用すると、純粋なJavaScriptを使用して変更できますが、ページにすでにjQueryが挿入されている場合は心配しないでください。両方の方法で説明します。
以下のhref
があると想像してください。
<a id="ALi" alt="ALi" href="http://dezfoolian.com.au">Alireza Dezfoolian</a>
そして、あなたはそれをリンクに変えるのが好きです...
ライブラリを使用せずに 純粋なJavaScript を使用すると、次のことができます。
document.getElementById("ALi").setAttribute("href", "https://stackoverflow.com");
しかし、 jQuery でもできます。
$("#ALi").attr("href", "https://stackoverflow.com");
または
$("#ALi").prop("href", "https://stackoverflow.com");
この場合、すでにjQueryをインジェクションしているのであれば、おそらくjQueryの方が短くてクロスブラウザが多いでしょうが…それ以外はJS
を使います….