2013-05-02 86 views
0

我访问与jQuery的一个网页链接,用下面的代码:无法更改href属性与jQuery

$('a[href]').each(function() { 
    $(this).attr('class', 'visited'); 
    $(this).attr('href', '#'); 
}) 

链接的类将被改变,但在href不会。有什么阻止我改变/改变href吗?

编辑:

我的代码更新到以下几点:

$('a[href]').each(function() { 
     $(this).addClass('visited'); 
     this.href = '#'; 
     }) 

然而,尽管它适用于大多数网站,这是行不通的news.yahoo.com。任何原因为何如此?

+3

似乎为我工作:http://jsfiddle.net/PbC8y/ – 2013-05-02 18:35:20

+0

这个脚本里大多数网站上的工作:但是,例如,它似乎并没有在http工作://新闻。 yahoo.com/。我使用每个@PSCoder的更新代码: this.href =“#” – user2344345 2013-05-02 19:10:45

+0

您是否试图通过iframe访问news.yahoo.com元素?这不应该工作 – 2013-05-02 19:36:09

回答

3

对于href,您可能需要使用.prop()而不是.attr()

对于类名,在大多数情况下,您希望使用.addClass()而不是覆盖整个类属性。

+1

为什么使用'.prop()'?这不是用户通常像“checked”或“selected”那样改变的东西。 '.attr()'在这种情况下使用是完全正确的。 – Blazemonger 2013-05-02 18:48:32

+0

@Blazemonger - 我认为你是对的 - 我立场纠正。那么,说'.prop()'还是'.attr()'对于这个用法同样有效呢? (其实我很喜欢PSCoder的答案中的直接DOM属性参考。) – 2013-05-02 19:04:03

+0

可以在不更改DOM的情况下更改复选框输入的checked状态,只需单击复选框即可。在这种情况下,'.prop()'是正确的方法。然而,以某种方式直接修改DOM来改变锚的'href'是不可能的,所以'.attr()'是合适的方法。 – Blazemonger 2013-05-03 13:30:05

3

你并不需要使用jquery包装过this做到这一点: - 你可以只访问href作为财产this本身,因为它代表的DOM元素。

$('a[href]').each(function() { 
... 
    this.href ="#"; 
}) 
+1

但是$本身就是jQuery,并且每个都是jQuery的成员函数;) – OliverK 2013-05-02 18:40:49

+1

他的意思是你不需要使用jQuery设置'href'的代码行;直接的DOM参考很容易或更容易使用。当然,你仍然在使用jQuery来处理代码的其他部分。 – 2013-05-02 18:47:39

+0

@MichaelGeary感谢您向OlikerK澄清。我编辑了我的答案,使其更加清晰。 :) – PSL 2013-05-02 18:58:57