$(function() {
$(".tab_content").hide();
$(".tabs").each(function() {
$(this).find('li').eq(0).addClass("active");
$(this).nextAll('.tab_container').children('.tab_content').eq(0).show();
});
});
Элемент .tabs
и элемент .tab_container
в вашем примере HTML являются братьями и сестрами, поэтому вы можете использовать .siblings()
или .nextAll()
для их выбора относительно элемента .tabs
.Разница между .siblings()
и .nextAll()
заключается в том, что последний ищет только элементы, которые идут после текущего выделения, а первый просматривает все родственные элементы.
Обратите внимание на использование .eq(0)
вместо :first
, они делают то же самое, выбирают только первый элемент в наборе, но использование .eq()
быстрее, так как это не требует обдумывания со строками.
Вот демонстрация: http://jsfiddle.net/YbNJ2/
ОБНОВЛЕНИЕ
Обычно я люблю помогать людям оптимизировать их код всякий раз, когда это возможнои вы можете увеличить производительность вашего цикла, используя $.each()
вместо $().each()
или, что еще лучше, вы можете использовать хорошо отформатированный цикл for
:
$(function() {
$(".tab_content").hide();
var $tabs = $(".tabs");
for (var i = 0, len = $tabs.length; i < len; i++) {
$tabs[i].find('li').eq(0).addClass("active");
$tabs[i].nextAll('.tab_container').children('.tab_content').eq(0).show();
}
});