Javascript 将jQuery从1.8更新到1.11标记未追加

Javascript 将jQuery从1.8更新到1.11标记未追加,javascript,jquery,Javascript,Jquery,我正在尝试将这个javascript代码从1.8更新到1.11,我遇到了一些问题。下面的代码过去在1.8中工作,但现在只有一半工作没有错误 我有以下功能: function selectCountry(c_id){ var obj = $('#country a[data-index=' + c_id + ']'); if(obj.hasClass('cselect')) return; var clone = obj.clone(); var d

我正在尝试将这个javascript代码从1.8更新到1.11,我遇到了一些问题。下面的代码过去在1.8中工作,但现在只有一半工作没有错误

我有以下功能:

function selectCountry(c_id){
    var obj = $('#country a[data-index=' + c_id + ']');
    if(obj.hasClass('cselect'))
        return;
    var clone = obj.clone();
    var div = $('<div class="keyword-box"></div>');
    var remove = $('<a href="javascript:void(0);" data-index="' + c_id + '" data-label="removeCountry_label" data-action="removeCountry" class="remove EXremove">&times;</a>');
    clone.after(remove).appendTo(div);
    div.prependTo('#selected_country');
    obj.hide().addClass('cselect');
    return false;
}
它过去的作用是创建一个如下所示的div:

<div class="keyword-box">
    <a href="javascript:void(0);" class="country-link keyword" data-index="9" rel="Albania">Albania</a>
    <a href="javascript:void(0);" data-index="9" data-label="removeCountry_label" data-action="removeCountry" class="remove EXremove">×</a>
</div>
<div class="keyword-box">
    <a href="javascript:void(0);" class="country-link keyword" data-index="9" rel="Albania">Albania</a>
</div>
div.append(clone);
div.append(remove);
div.prependTo('#selected_country');
但现在它正在创建这样一个div:

<div class="keyword-box">
    <a href="javascript:void(0);" class="country-link keyword" data-index="9" rel="Albania">Albania</a>
    <a href="javascript:void(0);" data-index="9" data-label="removeCountry_label" data-action="removeCountry" class="remove EXremove">×</a>
</div>
<div class="keyword-box">
    <a href="javascript:void(0);" class="country-link keyword" data-index="9" rel="Albania">Albania</a>
</div>
div.append(clone);
div.append(remove);
div.prependTo('#selected_country');
我不知道为什么第二个a标记不再添加到div中。有人知道为什么会发生这种情况吗?

在1.9版上有一个新版本

1.9之前、.after、.before和.replaceWith将尝试 如果当前jQuery集中的第一个节点 集合未连接到文档,在这些情况下,将返回新的 jQuery集合而不是原始集合。这就产生了几个问题 该方法可能存在也可能不存在不一致性和彻底的错误 根据其参数返回新结果!截至1.9,这些 方法始终返回原始的未修改集并尝试 在没有父节点的节点上使用.after、.before或.replaceWith 没有效果也就是说,集合或其包含的节点都不可用 变了

在你的情况下,你可以改变

clone.after(remove).appendTo(div);

在jQuery 1.9中更改了.after API。在您的案例中使用它现在没有效果。我认为您可能应该创建并显式地将这两个元素分别附加到它

因此:


我认为如果您添加如下链接,您的代码将更具可读性:

<div class="keyword-box">
    <a href="javascript:void(0);" class="country-link keyword" data-index="9" rel="Albania">Albania</a>
    <a href="javascript:void(0);" data-index="9" data-label="removeCountry_label" data-action="removeCountry" class="remove EXremove">×</a>
</div>
<div class="keyword-box">
    <a href="javascript:void(0);" class="country-link keyword" data-index="9" rel="Albania">Albania</a>
</div>
div.append(clone);
div.append(remove);
div.prependTo('#selected_country');

有错误吗?您使用的是.live吗?没有错误,我使用的是live,但我删除了所有这些,并将其替换为on。