jquery - 随着原始 div 的更改,div 的克隆也随之更改

标签 jquery css clone

我有一个 div“maindiv”。这里面还有 div,包括“imagediv”。在 jQuery 中,我写:

$(document).ready(function() {

    ......

    var copydiv = $('#maindiv').clone();
    var number = 1;
    $("body").delegate("#imagediv", "mousedown", function(event) {

        $("#maindiv").attr('id', "changedmain" + number);
        $("#imagediv").attr('id', "changedimage" + number);
        copydiv.insertAfter("#appendafter");
        number = number + 1;
    });
});​

HTML:

<div id="appendafter"></div>
<div id="maindiv">
.
.
.
</div>

对于这段代码,第一次追加copydiv后,添加的克隆的id为“maindiv”,所有内部div都有正确的id。但是当number为2时,克隆包含“changemain2” maindiv.WHY 这是?有什么补救措施吗????

最佳答案

首先,Id 在 DOM 中必须是唯一的。在这种情况下,如果您要附加多个集合,请切换到类选择器。

接下来,您的变量 number 是本地变量,在每次 mousedown

时重新定义并重置为 1
var copydiv = $('.maindiv').clone();  
var number = 1; // This was redefined and set as 1 on every `mousedown` 
                // So make it global

$("body").delegate(".imagediv","mousedown",function(event){       
    $(".maindiv").attr('class',"changedmain" + number);
    $(".imagediv").attr('class',"changedimage" + number );
    copydiv.insertAfter("#appendafter"); // You might have to change this too 
                                         // depending if this is repeated too
    number = number+1;
}

此外,最好使用 .on() 函数进行委托(delegate)

$("body").on("mousedown", ".imagediv", function(event){       
    $(".maindiv").attr('class',"changedmain" + number);
    $(".imagediv").attr('class',"changedimage" + number );
    copydiv.insertAfter("#appendafter"); // You might have to change this too 
                                         // depending if this is repeated too
    number = number+1;
}

解决方案:

问题在于使用的方法。使用 .clone() 克隆的元素将保留引用,因此它不会添加新元素,而是会不断更新以前引用的对象。

解决方法如下:

var number = 1; //Our Counter Script

function createDiv() {
    //Lets create a new div, 
             // I mean WHY CLONE AT the first place?? 
             // We are delegating events anyway :p

    $("<div />", {
        html : $('#maindiv').html(), // add the HTML of div we are trying to keep
             // ^ Better used cached 
             //   version is not updated regularly

        id : "maindiv-"+number       // add the generate id number 
    }).insertAfter("#appendafter");  // Now insert it
    number++;
}

$("body").on("mousedown", ".imagediv", function(event){
    createDiv(); //Delegating on all elements with `imagediv` class
});

Demo

关于jquery - 随着原始 div 的更改,div 的克隆也随之更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13248606/

相关文章:

javascript - 包含单选按钮的 jQuery .clone() HTML 表单 - 保留特定于克隆元素的单选事件

JQuery Masonry 不刷新容器高度

javascript - 转换比例转换仅在 Safari 中不起作用?

html - <td> 内 <div> 的宽度变化改变了 <td>-width

CSS:Div 自动适应所有屏幕尺寸的页面底部

clone - 省略传递给函数的双克隆值

javascript - 在验证之前清理 jQuery 验证插件数据

javascript - Extjs6.2,使用箭头键导航文本字段

html - 如何使绝对定位的元素位于滚动父元素之外但仍与其一起滚动?

c# - 从 C# 克隆 Mercurial 存储库?