Установка атрибута из родительского атрибута - PullRequest
1 голос
/ 18 августа 2011

У меня есть этот 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 ]

4 голосов
/ 18 августа 2011

$(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 голос
/ 18 августа 2011

Проблема в том, что this не содержит неправильное значение (оно относится к любому возможному контексту переноса), потому что вы находитесь не в правильном контексте.Посмотрите на любой из (в настоящее время) 3 других ответа, чтобы увидеть, как обойти эту проблему ( подсказка, вы хотите использовать каждый )

1 голос
/ 18 августа 2011

Все 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;
});

Выберите:)

0 голосов
/ 18 августа 2011
$('#menu li a').each(function(){
    var $this = $(this);
    $this.attr('href', "#"+$this.parent().attr('id'));
});
...