2010-10-07 6 views
2

J'ai un nav, chaque lien dans la navigation ajoute juste un hashtag sur l'URL existante quand on clique, pour le filtrage en direct, etc. avec l'utilisation de jQuery.Ajouter #hashtag pour lier en HTML à la volée

Je souhaite ajouter le même hashtag actuel SAME à une série de liens dans un div plus bas sur la page.

Par exemple, j'ai cliqué sur "le travail" et mon URL ressemble maintenant:

http://www.domain.com/page.html#work 

J'ai une série de liens dans la page:

<div id="links"> 
<ul> 
    <li><a href="http://www.domain.com/link1">Link1</a></li> 
    <li><a href="http://www.domain.com/link2">Link2</a></li> 
    <li><a href="http://www.domain.com/link3">Link3</a></li> 
    <li><a href="http://www.domain.com/link4">Link4</a></li> 
</ul> 
</div> 

Ces liens au sein de la div #Les liens doivent être mis à jour à la volée pour ajouter #work sur toutes les URL de sorte que lorsque vous cliquez dessus, le hashtag est ajouté.

Est-ce possible? Est-ce que ça a du sens?

+1

Je pense que nous avons tous répondu avec des variations différentes sur la façon dont nous lisons votre question. Je pensais que vous vouliez ajouter le texte du lien comme hash (par exemple, www.com # link1), Chigley pense que vous voulez ajouter #work à tous (interprétation valide), et je ne suis pas sûr de ce que pense Adam (il vient de poster quelques secondes, donc je ne l'ai pas lu). Peut-être qu'une légère clarification nous aiderait. – jps

+1

@Jud - aurait attribué +1 à votre commentaire s'il ne s'agissait pas de la faute d'orthographe de chigley: P (Vous n'êtes pas le premier, et certainement pas le dernier! Ne comprenez pas pourquoi ça arrive si souvent ...) – chigley

+0

@chigley - haha, c'est ce que je reçois pour toujours tout scanner au lieu de vraiment le "lire". Ça me pose des problèmes tout le temps. – jps

Répondre

2

Vous devriez joindre un gestionnaire d'événements click pour les liens dans #nav et changer les liens dans #links en conséquence. [See it in action]

Javascript

$("#nav a").click(function() { 
    $("#links a").each(function() { 
    this.href = this.href.split("#")[0] + "#" + window.location.hash; 
    }); 
});​ 

HTML

<div id="nav"> 
    <a href="#work">work</a> - 
    <a href="#school">school</a> 
</div> 
+0

Oooh. Je vois que cela fonctionne sur votre exemple exactement comme je le cherchais. Cependant, il y a d'autres fois où je vois que la mise à jour du hashtag est désactivée ... car je clique sur #work et ça se voit à la maison, puis je clique sur home et ça affiche #school. Il semble environ 50/50 de mon côté? –

+0

Mise à jour. Cela semble fonctionner étonnant sur ma page maintenant. Merci beaucoup! –

+0

'window.location.hash' contient déjà" # "pour moi. Est-ce que je peux compter sur ceci, et enlever le "" # "+" de votre solution? –

1

Essayez ceci:

$(function() { 
    $('#links a').each(function() { 
     $(this).attr('href', $(this).attr('href')+'#work'); 
    });​​​​​​​ 
}); 
0
$('#links li a').each(function() 
{ 
    $(this).attr('href', '#' + $(this).html()); 
}); 
0

Vous devez utiliser livequery plugin: http://plugins.jquery.com/project/livequery et la documentation est ici http://brandonaaron.net/code/livequery/docs

edit: Recherche en direct utilise la puissance des sélecteurs jQuery par des événements de liaison ou de tir callbacks pour les éléments adaptés automatiquement par magie, même après que la page a été chargée et les DOM mis à jour

$("#links a").livequery('click',function(event) { 
       $(this).attr('href', $(this).attr('href')+'#work'); 
      }); 
4

Utilisez la propriété hash des liens vers définir l'identifiant de fragment sans déconner avec le reste du href:

$('#links a').each(function() { 
    this.hash= location.hash; 
});​​​​​​​ 
+1

+1 J'oublie toujours l'étiquette de hachage du lien. – galambalazs

0
$("a[href]").click(function(){ 
    var href = $(this).attr('href'); 
    var ind = href.indexOf('#'); 
    if (ind != -1) { 
    var hash = href.substring(ind+1); 
    $("div#links li a").each(function() { 
    var myHref = $(this).attr('href'); 
    var myInd = myHref('#'); 
    if (myInd != -1) { 
     myHref = myHref.substring(0, myInd); 
    } 
    $(this).attr('href', myHref + hash) 
    }); 
    } 
    }); 
+1

On dirait que galambalazs était un peu plus rapide que moi. Nos réponses sont très similaires. Son approche javascript en utilisant split rend le code plus facile à suivre - beaucoup plus court. –

Questions connexes