2012-07-02 59 views
2

出于某种原因,这行代码返回undefined为$(this).attr("href")

$("a").attr("href", "javascript:page('" + $(this).attr("href") + "')"); 

我怎样才能获得价值?

+5

链接到JavaScript是臭的。如果可能的话,请改用事件 – Kos

+1

使用“javascript:”URL是很丑的。为什么不使用“点击”处理程序? – Pointy

回答

9
$("a").click(function(e){ 
    e.preventDefault(); 
    page(this.href); 
}); 
5

尝试:

$("a").attr("href", function (index, oldHref) { 
    return "javascript:page('" + oldHref + "')"); 
}); 

检查出attr有关,需要一个函数引用过载信息的文档。

虽然@Pointy指出,你应该考虑编写一个事件处理程序,而不是在你的标记中使用javascript:

+1

在这里使用'.prop()'而不是'.attr()'可能是一个好主意,但是。 – Pointy

+0

@点我不明白。首先使用'javascript:'不是一个好主意,而不是一个点击处理程序:X – Esailija

+1

@Esailija我同意 - 我只是在OP上输入了一个评论来说明这一点。 – Pointy

1

如果你想这样做(更新页面上的链接的所有href属性),你可以做

$("a").each(function() { 
    $(this).attr("href", "javascript:page('" + $(this).attr("href") + "')"); 
}); 
2

这是不需要在你的href属性

的Javascript一种替代方法
$('a').click(function(e) { 
    e.preventDefault(); 
    page(this.href); 
}) 
+0

+1代替标记中的嵌入式脚本。 – Nope

+0

您的代码有一个错误:一个额外的右括号。它应该是'.click(函数(e){...' – BryanH

+0

BryanH:修复它。谢谢 –

2

你不需要内嵌的JavaScript,为什么不象下面这样:

$("a").click(function(){ 
    page(this.href); 
    return false; 
}); 
+0

+1替代嵌入式脚本的标记。 – Nope