2011-08-18 2 views
1

J'ai ce HTML et je suis en train de convertir le href de photo.php à #photo etc pour chaqueDéfinition d'un attribut d'un attribut des parents

<ul id="menu"> 
    <li id="home" class="tab_selected"><a href="home.php">Home</a></li> 
    <li id="portfolio"><a href="portfolio.php">Portfolio</a></li> 
    <li id="music"><a href="music.php">Music</a></li> 
    <li id="video"><a href="video.php">Video</a></li> 
    <li id="photo"><a href="photo.php">Photo</a></li> 
</ul> 

J'ai essayé quelque chose comme ceci:

$('#menu li a').attr('href', "#"+$(this).parent().attr('id')); 

Mais le href sort toujours indéfini.

Je stocke le hash dans le li # id mais si je ne pouvais pas faire cela, ce serait encore mieux.

Merci.

Répondre

4

$(this) ne fait pas référence à l'objet auquel vous pensez qu'il se réfère.

Avec .attr vous pouvez utiliser une fonction comme second argument pour calculer de nouvelles valeurs pour chaque élément adapté, comme cet attribut:

// i == index, val == value of href at index i 
$('#menu li a').attr('href', function(i, val) { 
    return '#' + $(this).parent().attr('id'); 
}); 

Dans l'exemple ci-dessus, this fait référence au contexte correct (le moment itérée élément d'ancrage).

You can try it here.

+0

Cool, je ne savais pas jQuery soutenu cela. +1 – shesek

0
$('#menu li a').each(function(){ 
    var $this = $(this); 
    $this.attr('href', "#"+$this.parent().attr('id')); 
}); 
1

Tous jQuery

$('#menu li a').each(function() { 
    var a = $(this); 
    a.attr('href', "#" + a.parent().attr('id'); 
}); 

Partie jQuery

$('#menu li a').each(function() { 
    this.href = "#" + $(this).parent()[0].id; 
}); 

Moins partie jQuery

$('#menu li a').each(function() { 
    this.href = "#" + this.parentNode.id; 
}); 

Faites votre choix :)

1

Le problème est que this ne marche détient la mauvaise valeur (il se réfère à un contexte d'emballage il peut y avoir), parce que vous n'êtes pas dans le contexte approprié. Regardez l'une ou l'autre (actuellement) 3 autres réponses pour voir comment contourner ce problème (hint, you want to use each)

+0

Plus précisément, 'this' fait probablement référence à' window'. – shesek

+0

Vous avez raison, mon mauvais –

Questions connexes