当前位置:  开发笔记 > 编程语言 > 正文

如何使用jQuery更改超链接的href

如何解决《如何使用jQuery更改超链接的href》经验,为你挑选了8个好方法。

如何使用jQuery更改超链接的href?



1> Shog9..:

运用

$("a").attr("href", "http://www.google.com/")

将修改所有超链接的href以指向Google.你可能想要一个更精致的选择器.例如,如果您混合使用链接源(超链接)和链接目标(也称为"锚点")锚标记:


The CodeProject

...那么你可能不想意外地href为它们添加属性.为了安全起见,我们可以指定我们的选择器只匹配带有现有href属性的标签:

$("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.4,最后一个例子不需要使用`each` - 现在可以使用以下内容:`$(selector).attr('href ',function(){return this.replace(/.../,' ...');});`
@DavidHedlund轻微纠正:你错过了`href`:`...返回this.href.replace(/.../,'...'); });`
"在HTML中,元素名称不区分大小写,但在XML中它们区分大小写." - http://www.w3.org/TR/CSS21/selector.html

2> 小智..:

使用jQuery 1.6及更高版本,您应该使用:

$("a").prop("href", "http://www.jakcms.com")

之间的区别propattrattr抓住HTML属性,而prop抓住DOM属性.

你可以在这篇文章中找到更多细节:.prop()vs .attr()


为什么你应该使用'prop`而不是`attr`的解释将是值得赞赏的,因为人们来到这个问题并且发现`attr`显然在新的jQuery版本中工作得很好......
使用`prop`的@womble比`attr`更快,因为它更新了dom而不是修改HTML.http://jsfiddle.net/je4G5/
@Popnoodles还有更多问题,但在这里解释所有这些问题太冗长了.所以读者应该只看一下帖子womble链接.但是,这里的摘要会很好,否则这些信息有点丢失..

3> Peter Shinne..:

attr在查找中使用该方法.您可以使用新值切换任何属性.

$("a.mylink").attr("href", "http://cupcream.com");


如果我在a标签中设置class ="mylink",这对我有用.只是想澄清一下,如果有人试图设置name ="mylink",类似于上面的答案,并期望它工作.

4> flamingLogos..:

根据您是否要将所有相同的链接更改为其他内容,或者您​​希望仅控制页面的给定部分或每个部分中的链接,您可以执行其中一个.

更改所有指向Google的链接,以便他们指向Google地图:



$("a[href='http://www.google.com/']").attr('href', 
'http://maps.google.com/');

要更改给定部分中的链接,请将容器div的类添加到选择器.此示例将更改内容中的Google链接,但不会更改页脚中的Google链接:

...link to Google in the content...

$(".content a[href='http://www.google.com/']").attr('href', 'http://maps.google.com/');

要更改单个链接而不管它们落在文档中的哪个位置,请在链接中添加一个ID,然后将该ID添加到选择器.此示例将更改内容中的第二个Google链接,但不会更改第一个或页脚中的链接:

...link to Google in the content...

...second link to Google in the content...

$("a#changeme").attr('href', 'http://maps.google.com/');



5> Josh Crozier..:

尽管OP明确要求获得jQuery答案,但这些天你不需要使用jQuery.

一些没有jQuery的方法:

如果要更改所有元素的href值,请选择所有 元素,然后遍历节点列表 :( 示例)

var anchors = document.querySelectorAll('a');
Array.prototype.forEach.call(anchors, function (element, index) {
    element.href = "http://stackoverflow.com";
});

如果要更改实际具有属性href的所有元素的值,请href通过添加[href]属性selector(a[href])来选择它们:( 示例)

var anchors = document.querySelectorAll('a[href]');
Array.prototype.forEach.call(anchors, function (element, index) {
    element.href = "http://stackoverflow.com";
});

例如,如果要更改包含特定href值的元素的值,请使用属性选择器:( 示例)google.coma[href*="google.com"]

var anchors = document.querySelectorAll('a[href*="google.com"]');
Array.prototype.forEach.call(anchors, function (element, index) {
    element.href = "http://stackoverflow.com";
});

同样,您也可以使用其他属性选择器.例如:

a[href$=".png"]可用于选择值以其href结尾的元素.png.

a[href^="https://"]可用于选择的元素href被值前缀https://.

如果要更改满足多个条件href元素的值:( 示例)

var anchors = document.querySelectorAll('a[href^="https://"], a[href$=".png"]');
Array.prototype.forEach.call(anchors, function (element, index) {
    element.href = "http://stackoverflow.com";
});

..在大多数情况下,不需要正则表达式.



6> crafter..:

单击"menu_link"类的链接时会调用此代码段,并显示链接的文本和网址.返回false会阻止链接被跟踪.

Option 1
Option 2

$('.menu_link').live('click', function() {
   var thelink = $(this);
   alert ( thelink.html() );
   alert ( thelink.attr('href') );
   alert ( thelink.attr('rel') );

   return false;
});


向下投票这是迂腐的.他/她可能没有像其他用户那样花费他的答案,但他/她确实提供了解决问题的代码.除了复制和粘贴定制解决方案之外,OP还需要更多考虑.
我对于投票不太苛刻,但如果你不想说明为什么你投票失败,那么就没有什么可以实现的,你不应该打扰.
由于您的代码段和答案没有回答原始问题,因此没有真正解释为什么使用该代码段获得的信息有用的原因.

7> Pawel..:

停止使用jQuery只是为了它!仅使用JavaScript非常简单.

document.querySelector('#the-link').setAttribute('href', 'http://google.com');

https://jsfiddle.net/bo77f8mg/1/


jQuery不够.

8> Aman Chhabra..:

这样做的简单方法是:

Attr函数(自jQuery 1.0版开始)

$("a").attr("href", "https://stackoverflow.com/") 

要么

Prop函数(自jQuery 1.6版开始)

$("a").prop("href", "https://stackoverflow.com/")

同样,上述方式的优点在于,如果选择器选择单个锚,则仅更新该锚,并且如果选择器返回一组锚,则仅通过一条语句更新特定组。

现在,有很多方法可以识别确切的锚点或一组锚点:

很简单的一个:

    通过标签名称选择锚点: $("a")

    通过索引选择锚点: $("a:eq(0)")

    选择特定类别的锚点(例如,在该类别中仅锚定class active):$("a.active")

    选择具有特定ID的锚点(此处为示例profileLink ID):$("a#proileLink")

    选择第一个锚href: $("a:first")

更有用的:

    选择所有具有href属性的元素: $("[href]")

    选择所有具有特定href的锚点: $("a[href='www.stackoverflow.com']")

    选择所有没有特定href的锚点: $("a[href!='www.stackoverflow.com']")

    选择所有带有href且包含特定URL的锚点: $("a[href*='www.stackoverflow.com']")

    选择以特定网址开头的带有href的所有锚点: $("a[href^='www.stackoverflow.com']")

    选择所有带有以特定URL结尾的href的锚点: $("a[href$='www.stackoverflow.com']")

现在,如果要修改特定的URL,可以执行以下操作:

例如,如果您要为转到google.com的所有URL添加代理网站,则可以按以下方式实现它:

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

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有