Javascript 克隆并附加唯一ID后找不到DOM元素

Javascript 克隆并附加唯一ID后找不到DOM元素,javascript,jquery,Javascript,Jquery,所以我创建了一个随机字符串值: var randomString = function(stringLength) { var i = 0; stringLength = stringLength || 10; var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'; var randomString = ''; for (i = 0; i < strin

所以我创建了一个随机字符串值:

var randomString = function(stringLength) {
    var i = 0;
    stringLength = stringLength || 10;
    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz';
    var randomString = '';
    for (i = 0; i < stringLength; i += 1) {
        var rNum = Math.floor(Math.random() * chars.length);
        randomString += chars.substring(rNum, rNum + 1);
    }
    return randomString;
};
然后克隆它并将该列表元素向右移动:

    var cloneImage = function($thumbnail) {
        addUniqueId($thumbnail);
        var $lastImgAdded = $('.js-gallery-edit-pane li').last();
        var span = $('<span />');
        span.addClass('x').text('x');
        var $clone = $thumbnail.clone(true, true).appendTo($('.js-gallery-edit-pane')).prepend(span).hide().fadeIn(200).unbind('click');
        bindRemoveHandler($clone);
    };
var cloneImage=函数($thumbnail){
addUniqueId($thumbnail);
var$lastimgaded=$('.js画廊编辑窗格li').last();
变量范围=$('');
span.addClass('x')。text('x');
var$clone=$thumbnail.clone(true,true).appendTo($('.js画廊编辑窗格')).prepend(span.hide().fadeIn(200).取消绑定('click');
bindRemoveHandler($clone);
};
然后,我在左边的列表元素中添加一个覆盖层,使其变灰。在这一点上一切都正常

从那里,用户可以通过单击图像上的“X”删除右侧最近克隆的项目。这样可以很好地删除最近克隆的图像,但是找不到原始覆盖。它应该与随机字符串值相关联,所以我只是在
$('.js gallery select pane')中查找它但由于某种原因它找不到它

知道为什么吗

如果您在代码中放入一个
警报(字符串)
,您将看到该字符串已经包含
rand-
,因此在选择器中只需执行以下操作:

$('.js-gallery-select-pane').find('#' + string).find('.overlay').remove();

以下是工作流程

您有两个元素集合,其中包含ID对

不过有三个问题。前两个问题在这里

您正在获取克隆“rand etctcetc”的完整id 然后再次将rand-添加到“rand-rand等”,然后将其用作选择器$('rand-rand-ETCETC')。相反,我将其更改为只向id添加必要的内容。您还需要删除js gallery编辑类,以便将内容添加回右侧的列表中

    var bindRemoveHandler = function($thumbnail) {
      $thumbnail.on('click', function() {
        $(this).fadeOut(200, function() {
          var string = $(this).attr('id');
          $('.js-gallery-select-pane').find('#' + string).removeClass('js-gallery-editing').find('.overlay').remove();
          $(this).remove();
          updatePictureCount();
        });
      });
    };
你可以停在这里,但你也有一个不同的问题。ID属性是唯一的。尝试使用自定义属性,Jquery属性等于选择器。您想要的查询如下所示

     $('.js-gallery-select-pane').find('[pairid="' + string +'"]');

在这里,请注意:

您正在将id添加到原始,然后克隆。。。现在有2个相同的ID+1-不要忘记删除js gallery编辑类,否则如果克隆一次图像,就无法将其克隆到右侧,然后将其删除<代码>$(“.js画廊选择窗格”).find(“#”+string.removeClass('js-gallery-editing').find('.overlay').remove()哇。真不敢相信我竟然忽略了这一点。感谢您向我指出这一点,并快速回复:)
     $('.js-gallery-select-pane').find('[pairid="' + string +'"]');