从parents属性设置属性

时间:2011-08-18 11:05:35

标签: jquery hash parent

我有这个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中,但如果我不能这样做,那就更好了。

感谢。

4 个答案:

答案 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引用了正确的上下文(当前迭代的锚元素)。

You can try it here.

答案 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'));
});