2011-12-14 3 views
2

У меня есть код, который нуждается в настройке. Мне нужно, чтобы .play «rel» был заменен на «id» .audio_player. Там будет несколько «медиа» div, которые нужно будет пройти.JQuery каждый() не работает правильно

Вот код

<div class="media"> 
    <div class="message_buttons"> 
     <li id="listen" class="play_button"> 
      <a class="play" rel="" href="AudioFile.mp3"> Listen </a> 
     </li> 
    </div> 
    <div class="audio_player" id="play1243"> 
     <audio controls="controls"></audio> 
    </div> 
</div> 

А вот сценарий у меня есть до сих пор. Кажется, что он работает с первым медиа-div, но затем делает каждый .play «rel» на странице таким же, как первый audio_player «id», а не «id» в собственном div.

$.each($('.play'), function(index) { 
    //$(this).attr("rel", $(".audio_player").attr("id")); 
    $(".play").attr("rel", $(".audio_player").attr("id")); 
}); 

Я прокомментировал другую версию, которая также работает, но дает тот же результат. Спасибо, ребята, за помощь в этом. Я чувствую, что сейчас действительно очень близко. Но это не может быть последним. Спасибо за ваше время.

ответ

1

Попробуйте

$('.play').each(function(){ 
    $(this).attr("rel",$(this).closest('.message_buttons').next('.audio_player').attr('id')); 
}); 

Fiddle here

+0

Удивительный! Это заняло у меня почти 2 дня, спасибо вам большое !!!!! – BostonBB

+0

Рад, что я мог помочь! – john

2

Просто запустите each() на селекторе, а затем вы можете использовать this контекст для каждого найденного элемента:

$('.play').each(function(i) { 
    var id = $(this).parents('.media').find('.audio_player').attr('id'); 
    $(this).attr('rel', id); 
}); 
+0

Единственная проблема с этим она даст ту же "audio_player Ид каждый раз. – john

+0

Ой, извините, мое решение было основано на вашем коде. Я починю это. –

+0

Это решение все еще не работает. Проверьте мое решение и рабочий jsfiddle. – JesseBuesking

1
 
$(".play").each(function() { 
    $(this).attr("rel", $(".audio_player").attr("id")); 
}); 
0
$('.play').each(function(index) { 
    $(this).attr('rel', $('.audio_player').get(index).attr('id'); 
}); 
1

Вы могли бы использовать это:

$('.play').each(function() { 
    $(this).attr('rel', $(this).closest('.media').find('.audio_player').attr('id')); 
}); 

Отъезд this jsfiddle, чтобы увидеть его в действии.

0

вы можете сделать таким образом

$.each($('.play'), function(index) { 
$(this).attr("rel",$(this).closest(".audio_player").attr("id")); 
}); 

проверки скрипка here

0
$('.play').each(function(index) { 
    $(this).attr("rel", $(this).closest('.media').find('.audio_player').attr('id')); 
});