2011-05-04 4 views
1

J'ai un lien simple dans ma TML (tapisserie apache spécifique):Fetch et remplacer la valeur de l'attribut href de <a> tag en utilisant prototype

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

maintenant sur le navigateur si je suis en train de cliquer sur le lien, en fait il est redirection vers

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

au lieu de celui-ci devrait ouvrir un nouvel onglet pour ce lien.

donc la logique que je pense est:

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. 

Donc, pour ce faire, en fait je veux utiliser prototype (framework javascript), et je suis peu nouveau à cette ...

Comment puis-je écrire la fonction en utilisant la bibliothèque Prototype.js?

Répondre

2

Vous ne dites pas d'où provient la valeur pour votre href. Comme vous le dites, vous devez ajouter un "http". En supposant que le lien est rendu de façon dynamique, pourquoi ne faites-vous pas ce côté serveur, probablement beaucoup plus facile. TML:

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

et .java:

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

Cette approche est beaucoup mieux que de le faire côté client comme ce qui se passe si l'utilisateur a désactivé javascript? Par contre, s'il s'agit d'un lien statique dans votre fichier .tml, écrivez simplement "http://www.google.com"!

Edit: À la lumière de votre commentaire ci-dessous:

public String getUrl() { 

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

    return url; 
} 

Ce qui précède est juste un exemple de ce qui ne le faire. Vous pouvez soit ajouter une autre méthode à activityDetails qui le fait (par exemple getExternalLinkWithProtocol()), ou fournir une méthode wrapper similaire à celle ci-dessus.

+0

+1 et ouais je ne peux pas imaginer pourquoi cela aurait besoin t o être effectué côté client, sauf si l'information est seulement connue du côté client. Sinon, il appartient au serveur dans le fichier .java associé au fichier .tml. – WhiteFang34

+0

bien en réalité le href = "$ {activityDetails.externalLink}" - provenant de la base de données, et cette valeur de lien peut avoir le http: // ou peut-être pas ... C'est pourquoi je voulais le vérifier en utilisant javascript. – Nirmal

+0

@Nirmal - voir ma réponse éditée.Cela devrait vraiment être fait sur le serveur. –

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; 
     } 
    } 
}; 
1

Aucune raison de le faire côté client. Il suffit de changer votre modèle à:

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

et si elle est fondée sur une propriété:

< a href = "http: // $ {nom d'hôte}" class = cible "info-value" = "new"> $ {nom d'hôte} </a>

... ajuster pour s'adapter à vos propriétés, etc

Questions connexes