2014-07-20 28 views
1

该函数用于删除元素并继续循环。我使用div:FIRST或LAST在元素被移除后继续。如何从下一个元素继续。 例如,去掉注释3之后,我可以把它的循环,从注1.重新开始,但其实我是想它从Notes继续4. 感谢jQuery循环 - 从下一个元素继续

http://jsfiddle.net/D3L45/1/

Style 
#NotesBlock { 
position: absolute; 
width: 600px; 
margin: 0px auto; 
} 
.divNotes { 
display: none; 
padding: 12px; 
width: 100%; 
text-align: center; 
position: absolute; 
} 

<a href="#" class="CloseNotes">Not Interesting</a> 
<div id="NotesBlock"> 
<div class="divNotes"> 
    <div class=" NotesTopic"> 
     <h4>Topic 1</h4> 
     <p>1st Topic description</p> 
    </div> 
</div> 
<div class="divNotes"> 
    <div class=" NotesTopic"> 
     <h4>Topic 2</h4> 
     <p>2nd Topic description</p> 
    </div> 
</div> 
<div class="divNotes"> 
    <div class=" NotesTopic"> 
     <h4>Topic 3</h4> 
     <p>3rd Topic description</p> 
    </div> 
</div> 
<div class="divNotes"> 
    <div class=" NotesTopic"> 
     <h4>Topic 4</h4> 
     <p>4th Topic description</p> 
    </div> 
</div> 
<div class="divNotes"> 
    <div class=" NotesTopic"> 
     <h4>Topic 5</h4> 
     <p>5th Topic description</p> 
    </div> 
</div> 

脚本

var notesElement = null; 
function notesLoop(elem) { 
notesElement = elem; 
elem.fadeIn() 
    .delay(1500) 
    .fadeOut(function() { 
     notesLoop(elem.next()); 
     if(elem.next().length === 0) { 
      notesLoop($(".divNotes:first")); 
     } 
    }); 
} 

$(document).ready(function() { 
    notesLoop($(".divNotes:first")); 
    $(".CloseNotes").click(function (e) { 
     e.preventDefault(); 
     if (notesElement) 
      $(notesElement).remove(); 
      notesLoop($(".divNotes:first"));  
    }); 
}); 

UPDATE:

我没用过PUSH()或PUSHSTACK()。我正在尝试使用它们更新此代码。可能吗?我必须为此发布另一个问题吗?由于

我更新的代码:

http://jsfiddle.net/5dbJc/1/

+0

如果你想讨论pushstack :) – carter

回答

1

你可以得到你删除的元素的索引,然后发送基于该指数的选择。

http://jsfiddle.net/D3L45/4/

$(document).ready(function() { 
    notesLoop($(".divNotes:first")); 
    $(".CloseNotes").click(function (e) { 
    e.preventDefault(); 
    var divIndex = notesElement.index();  
    if(divIndex == $('.divNotes').length -1){ 
     divIndex = 0; 
    } 
    if (notesElement) 
     $(notesElement).remove();   
     notesLoop($(".divNotes:eq("+divIndex+")"));  
    }); 
}); 
+0

还要记住'index()'只会得到相对于兄弟的索引。 :) – carter

+0

谢谢@carter。我并没有考虑索引,因为我想知道索引在被删除的元素之后会发生变化。您的更新代码工作正常,但是当我关闭最后一个div时,循环停止。我试图把它推到div:第一次,当最后一个元素被关闭,但不能。 :( – Sosh

+0

如果您要删除最后一个元素,我添加了一个完整性检查以回到零。 – carter

0

在点击监听器,你告诉jQuery来调用notesLoop()功能从$(".divNotes:first")开始。如果你想从另一个元素开始改变它。例如,替代:

if (notesElement) 
$(notesElement).remove(); 
notesLoop($(".divNotes:first")); 

通过

if(notesElement){ 
var $next=notesElement.next(); 
    if($next.length==0){ 
    $next=$(".divNotes:first"); 
    } 
notesElement.remove(); 
notesLoop($next); 
} 

活生生的例子:http://jsfiddle.net/D3L45/2/

+0

完成请张贴另一个问题。谢谢@ user3786597。我不知道下一个$。 :) – Sosh

+0

'$ next'只是记住变量是一个jQuery对象的符号,您可以根据需要命名它。 – user3786597

+0

很好。谢谢@ user3786597。我已经更新了这个问题。 – Sosh