2014-12-11 54 views
0

我有一個jQuery腳本,獲得一個字符串,併爲每個字母做li元素,我有一個for循環選擇從最後到第一個每個字母,並希望從這些中刪除一個類li在for循環中使用.eq()來選擇它們,但它隻影響最後一個元素,其他元素不會刪除。 我的代碼是:jquery removeclass不在html中的活動元素

var str = this.html(), 
    container = this; 

container.after('<ul class="letters-wrapper"></ul>').hide(); 

for(var i=0; i<str.length;i++){ 
    $('.letters-wrapper').append('<li class="each-letter dropIn stay-up">'+ str[i] +'</li>'); 
    if(str[i] == " "){ 
     $('.letters-wrapper').append('<li class="each-letter dropIn stay-up">'+ '&nbsp;' +'</li>'); 
    } 
} 
for(var i = $('.each-letter').length-1; i>=0; i--){ 
    var j = ($('.each-letter').length-1) - i; 
     setTimeout(function() { 
      $('.each-letter.dropIn').eq(i).removeClass('stay-up'); 
     }, j*100); 
    } 
} 
+0

你爲什麼不創建沒有課堂的李?它看起來像你試圖創建一個動畫,在這種情況下使用jQuery animate和toggleClass。 – Rafael 2014-12-11 05:56:41

+0

爲什麼你想使用'setTimeout'函數?你有這樣的具體要求? 'setTimeout'在你的情況下導致了問題。 – 2014-12-11 06:13:12

+0

我認爲它在.eq(i)中使用變量,因爲當我使用直接索引號影響元素時,例如.eq(8),它可以在每個字母處按索引(8) – Hossein 2014-12-11 06:14:13

回答

0

爲了與setTimeout這項工作試試這個代碼:JSFIDDLE

var str = this.html(), 
container = this; 

container.after('<ul class="letters-wrapper"></ul>').hide(); 

for(var i=0; i<str.length;i++){ 
    $('.letters-wrapper').append('<li class="each-letter dropIn stay-up">'+ str[i] +'</li>'); 
    if(str[i] == " "){ 
     $('.letters-wrapper').append('<li class="each-letter dropIn stay-up">'+ '&nbsp;' +'</li>'); 
    } 
} 

for(var i = $('.each-letter').length-1; i>=0; i--){ 
    var j = ($('.each-letter').length-1) - i; 
    doSetTimeout(i); 
} 
function doSetTimeout(i) { 
    var j = ($('.each-letter').length-1) - i; 
    setTimeout(function() { 
     $('.each-letter.dropIn:eq('+i+')').removeClass('stay-up'); 
    }, j*200); 
} 
+0

它worled,非常感謝 – Hossein 2014-12-11 06:47:49

-3

檢查jQuery的衝突。如果它不在現場工作,那將會是問題。用jQuery替換$並檢查

+0

這是一個評論不是答案 – Rafael 2014-12-11 05:54:20

+0

我檢查了,不工作 – Hossein 2014-12-11 06:15:40

-1

檢查兩件事。首先在第二個循環中定義var j之前放置一個console.log,並檢查它將在控制檯中登錄多少次。如果它只記錄一次意味着你的條件是錯誤的,並且如果記錄的數量與你的數量一樣多,那麼問題出現在你的setTimeout中。 for循環將呈現j和把最後Ĵ值超時

+0

這可以發表評論。沒有回答。 – 2014-12-11 06:21:45

+0

我檢查了我和j都正確循環,這是關於我的超時 – Hossein 2014-12-11 06:31:14

0

我找到了一種方法來使用設置超時時間我的代碼:

$('.each-letter').each(function(i){ 
    var j = $('.each-letter').length - i; 
    setTimeout(function() { 
     $('.each-letter.dropIn').eq(j).removeClass('stay-top'); 
    }, i*100); 
}); 
+0

檢查是否它從'第一個元素'刪除'留級'類。我相信它不符合這個代碼。 – 2014-12-11 06:45:00

+0

它運作良好 – Hossein 2014-12-11 07:46:58