获取并替换<a> tag using prototype</a>的href属性值

时间:2011-05-04 09:32:32

标签: javascript prototypejs tapestry

我的tml中有一个简单的链接(特定于apache tapestry):

<a href="www.google.com" class="info-value" target="new">www.google.com</a>

现在在浏览器上如果我试图点击链接,实际上它正在重定向到

http://localhost:8080/..../..../www.google.com

而不应该为该链接打开一个新标签。

所以我想的逻辑是:

1) Fire a javascript on page load
2) Get the href value of anchor tag 
3) Append http:// at the start, if it doesn't contains it.

所以要做到这一点,实际上我想使用原型(javascript框架),我对此有点新鲜......

如何使用Prototype.js库编写函数?

3 个答案:

答案 0 :(得分:2)

您没有说明href的价值来自哪里。正如你所说,你需要添加一个“http”。假设链接是动态呈现的,为什么不在服务器端执行此操作,可能更容易。在tml:

... href="${url}" ....

和.java:

public String getUrl() {
  return "http://" + url;
}

这比客户端更好的方法,如果用户关闭了javascript会发生什么?

另一方面,如果它是.tml中的静态链接,只需写上“http://www.google.com”!

编辑:根据您的评论如下:

public String getUrl() {

   if (!url.startsWith("http://") {
      url = "http://" + url;
   }

   return url;
}

以上只是做什么的一个例子。您可以向activityDetails添加另一个执行此操作的方法(例如getExternalLinkWithProtocol()),或者提供类似于上述方法的包装方法。

答案 1 :(得分:1)

没有理由在客户端这样做。只需将模板更改为:

&lt; a href =“http://www.google.com”class =“info-value”target =“new”&gt; www.google.com&lt; / a&gt;

如果它基于属性:

&lt; a href =“http:// $ {hostname}”class =“info-value”target =“new”&gt; $ {hostname}&lt; / a&gt;

...调整以适合您的属性等。

答案 2 :(得分:0)

window.onload = function(){
    var links = document.links;
    for(var i=links.length-1; i>=0; i--){
        var link = links[i];
        var href = link.getAttribute("href");
        if(href.indexOf("http://") < 0){
            link.href = "http://" + href;
        }
    }
};