我有这个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总是未定义。
我将哈希存储在li#id中,但如果我不能这样做,那就更好了。
感谢。
答案 0 :(得分: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
引用了正确的上下文(当前迭代的锚元素)。
答案 1 :(得分: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;
});
Less Part jQuery
$('#menu li a').each(function () {
this.href = "#" + this.parentNode.id;
});
选择:)
答案 2 :(得分:1)
问题是this
没有包含错误的值(它指的是可能存在的任何包装上下文),因为你没有处于正确的上下文中。查看(当前)其他3个答案,了解如何解决此问题(hint, you want to use each)
答案 3 :(得分:0)
$('#menu li a').each(function(){
var $this = $(this);
$this.attr('href', "#"+$this.parent().attr('id'));
});