2010-08-22 8 views
0

J'ai une série de boîtes div horizontales dont j'ai besoin pour ajouter le href pertinent pour lier au suivant avec des liens d'ancrage. Comme ils sont produits dynamiquement, j'ai besoin d'ajouter le href avec JavaScript.Ajouter href aux liens dynamiquement

L'effet désiré sera:

<div id="post1"> 
<a class="next-video" href="#post2">NextVideo</a> 
</div> 

<div id="post2"> 
<a class="next-video" href="#post3">NextVideo</a> 
</div> 

Ajouté le script

$('.next-video').each(function(index) { 
    $(this).attr('href', '#post' + (index + 2)); 
}); 

mais ne semble pas cibler la classe .next-video, c'est la version live: http://www.warface.co.uk/clients/detail-shoppe/test-scroll

Merci beaucoup

+0

Vous avez beaucoup de 'id = "wrapper" 'et' id = "post2" 'éléments dans la page, entre autres questions: http://validator.w3.org/check?uri=http://www.warface.co.uk/clients/detail -shoppe/test-scroll & charset = (détecter + automatiquement) & doctype = Inline & group = 0 Vous devez les corriger ... exécuter le script après le chargement de la page fonctionne correctement, voir si corriger le balisage invalide l'aide à fonctionner correctement sur 'document.ready '. –

+0

Woo, merci Nick pour les conseils de balisage et cela fonctionne très bien :) – Rob

Répondre

3

Vous pouvez faire quelque chose comme cela en utilisant .attr():

$("a.next-video").attr('href', function(i) { 
    return '#post' + (i+2);  
}); 

Depuis jQuery 1.4+, .attr() prend fonction ce qui en fait très propre (et moins cher à courir).

Ou si vous ne connaissez pas le numéro de poste (par exemple, ils sont tout simplement pas dans l'ordre numérique), vous pouvez l'obtenir à partir de la prochaine <div>, comme ceci:

$("a.next-video").attr('href', function(i) { 
    return '#' + $(this).parent().next("div[id^='post']").attr('id'); 
}); 
+0

Vous avez dit "moins cher à courir" que voulez-vous dire en disant cela? Il est plus de temps efficace? – Tarik

+0

@Braveyard - Vous ne créez pas d'autre objet jQuery, vous définissez des propriétés DOM, donc c'est moins cher dans le fait qu'il y a moins de travail à faire ... alors oui, cela devrait être plus efficace, sauf s'il y a quelque chose de très étrange passe. Les objets jQuery sont des tableaux de références aux éléments DOM, nous ne faisons que boucler les propriétés de ce tableau ... au lieu de transformer chaque référence dans le tableau * aussi * en un objet jQuery juste pour faire un peu de travail ... 't * need * un objet jQuery, sautez l'intermédiaire et sauvez du CPU, comme vous le voyez dans le premier bloc de code, c'est aussi un peu plus laconique :) –

3
$('.next-video').each(function(index) { 
    $(this).attr('href', '#post' + (index + 2)); 
}); 
+0

Pouvez-vous me dire pourquoi vous avez choisi la méthode de la méthode au lieu de la manière de sélection pour sélectionner chaque élément de .next-vidéo? – Tarik

+0

@Braveyard, je ne comprends pas votre question. –

+0

Hey, ne semble pas cibler la classe .nextvideo car elle n'ajoute pas la valeur href. Ceci est l'échantillon en direct: http://www.warface.co.uk/clients/detail-shoppe/test-scroll – Rob

Questions connexes