2011-08-18 146 views
1

我有這樣的HTML和我試圖將href從photo.php轉換爲#photo等每個設置從父母的屬性屬性

<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> 

我一直在嘗試這樣的事情:

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

但是href總是出來undefined。

我將存儲散列在li#id但如果我不能這樣做會更好。

謝謝。

回答

4

$(this)不引用您認爲引用的對象。

隨着.attr可以使用一個功能作爲第二個參數來計算新的屬性值對每個匹配的元件,例如:

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

在上述例子中,this指正確的上下文(當前迭代錨元素)。

You can try it here.

+0

很酷,我不知道jQuery支持。 +1 – shesek

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

所有的jQuery

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

部分jQuery的

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

少部分的jQuery

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

隨你挑:)

1

的問題是,this犯規持有錯誤的值(它指的是可以有任何的包裝方面),因爲你在適當的情況下並非如此。看看(當前)其他3個答案,看看如何解決這個問題(hint, you want to use each

+0

更準確地說,'this'可能指的是'window'。 – shesek

+0

你是對的,我的不好 –