2013-06-11 2 views
1

Это действительно странно и должно быть простым.JQuery: Скрыть детей, показать n-й ребенок?

У меня есть массив изображений в пределах тегов в DIV, например:

<div id="images"> 
<a href="#"><img src="img1.jpg"/></a> 
<a href="#"><img src="img2.jpg"/></a> 
<a href="#"><img src="img3.jpg"/></a> 
</div> 

Я хочу, чтобы скрыть все из них, но перебрать и показать п-й один, так что я создал этот образ стиль слайдер сценарий:

var atags = $('#images').children().length; 

$('#images').children().hide(); 

$('#images a:first').show(); 

var i=0 

while (i <= atags){ 

$('#images').children().delay(4000).hide(); 

$("images:nth-child(" + i + ")").show(); 

i = i + 1; 
} 

Проблема в том, что никакие другие теги, несмотря на первую из сторон цикла, не отображаются. Они все остаются скрытыми, чтобы показать .show(). Кажется, строка $("images:nth-child(" + i + ")").show(); просто не работает.

Может ли кто-нибудь указать мне в правильном направлении?

+0

@GeorgeCummins oops sorry забыть вставить его. Его число A тегов внутри родительского элемента. Поправлено выше – MeltingDog

+0

Что такое 'delay()' good? – Bergi

ответ

3

images != #images плюс вы должны выбрать фактические изображения не контейнер:

$("#images img:nth-child(" + i + ")").show(); 

Но я бы просто использовать eq, не уверен, если выше будет работать при условии, что образы внутри тег:

$("#images img").eq(i).show(); 

В любом случае, вам не нужно, что while цикл, просто использовать each для цикла сбора JQuery в.

Также обратите внимание, что delay работает только в том случае, если есть очередь анимации, и это не ваш случай.

+0

Или просто используйте '$ ('# images'). Children()', которые уже выбраны в предыдущем заявлении ... – Bergi

+0

@Bergi: Код в вопросе, хотя это немного беспорядок. Я попытался объяснить ошибку, но OP должен, вероятно, зациклиться на 'each', не знаю, почему цикл while ... – elclanrs

Смежные вопросы