每次克隆时,addClass都会追加

时间:2014-04-29 05:53:08

标签: javascript jquery

这是我的剧本

 var newclass = 0;

 jQuery("#addexperience").click(function(){
    $("#expclone").clone().find("input:text").val("").end().prependTo( ".exp_clone" );
    $(".ongoing").each(function(){
        $(".ongoing").addClass("newclass"+newclass);
        newclass++;
    });
 });

我想克隆一个特殊的div,并在clone元素上添加一个类。 但每次都附加addClass,

意味着在第一个克隆中添加了:newclass1,在第二个克隆中添加了:newclass1 newclass2;等...... ..

我想在第二个克隆中只使用newclass2,在thire clone中只需要newclass3等等。

4 个答案:

答案 0 :(得分:0)

您应该在$(this)

的回调中使用.each
$(".ongoing").each(function(){
    $(this).addClass("newclass"+newclass);
    newclass++;      
});

或者您甚至不需要变量newclass.addClass接受函数作为参数:

$(".ongoing").addClass(function(index) {
  // index is start from 0
  return "newclass" + (index + 1);
});

答案 1 :(得分:0)

这是因为每次克隆元素时,即使它已经存在,它也会将类添加到每个元素中。你所做的是,克隆元素后,获取最后一个克隆元素,addClass仅为此。删除.each()功能并尝试:

$(".ongoing").last().addClass('newClass'+newclass);
newclass++; 

答案 2 :(得分:0)

更改此行:

$(".ongoing").addClass("newclass"+newclass);

为:

$(".ongoing").removeClass().addClass("newclass"+newclass);

它会删除所有以前的.ongoing类,并在其中添加新类。 如果您想要.ongoing课程,请尝试这样:

$(".ongoing").removeClass().addClass("ongoing newclass"+newclass);

答案 3 :(得分:0)

试试这个,

var newclass = 0;
jQuery("#addexperience").click(function(){
    $clone=$("#expclone").clone()
    $clone.find("input:text").val("");
    $clone.find(".ongoing").removeAttr('class') // remove all classes
          .addClass('ongoing'); // again add ongoing class
    $clone.find(".ongoing").each(function(){
        $(this).addClass("newclass"+newclass);
        newclass++;
    });
    $clone.prependTo(".exp_clone");
});

但是,最好是提供一个新的id而不是新的class