jquery removeclass不能处理html中的live元素

时间:2014-12-11 05:50:19

标签: jquery removeclass

我有一个jquery脚本,它为每个字母获取一个字符串并生成li元素,我有一个for循环用于选择从last到first的每个字母,并希望从这些li中删除一个类通过使用.eq()选择它们来进行for循环,但它只影响最后一个元素而其他元素类不会删除。 我的代码是:

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);
    } 
}

4 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

我找到了一种方法来为我的代码使用set timeout:

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

答案 2 :(得分:-1)

检查两件事。首先在第二个循环中定义var j之前放入console.log并检查它将在控制台中登录的次数。如果它只记录一次意味着你的条件是错误的,如果它记录的数量与你的li数一样多,问题就在你的setTimeout中。 for循环将呈现j并将最后一个j值置于超时

答案 3 :(得分:-3)

检查jquery冲突。如果它不在现场工作,那将是问题。用jQuery替换$并检查