2015-04-02 84 views
0

我正在嘗試將此javascript代碼從1.8更新爲1.11,並且出現問題。下面的代碼用於在1.8中工作,但現在它只有一半工作(沒有錯誤)。更新jQuery從1.8到1.11 <a>標籤不被追加

我有以下功能:

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:

<div class="keyword-box"> 
    <a href="javascript:void(0);" class="country-link keyword" data-index="9" rel="Albania">Albania</a> 
</div> 

我不確定爲什麼第二個a標籤沒有被添加到div中。任何人都可以看到爲什麼會發生?

+0

任何錯誤?你使用'.live'嗎? – 2015-04-02 15:51:23

+0

沒有錯誤,我正在使用現場,但我刪除了所有這些,並用'on'替換它。 – 2015-04-02 15:52:20

回答

4

還有的是一個change in jQuery在版本1.9

此前1.9,。經過()。以前(),和.replaceWith()將嘗試在當前jQuery來 添加或更改節點設置,如果 集合中的第一個節點未連接到文檔,並且在這些情況下返回了一個新的 jQuery集合,而不是原始集合。這創建了幾個 不一致和直接的錯誤 - 該方法可能會或可能不會 返回一個新的結果,具體取決於它的參數!從1.9開始,這些 方法總是返回原始未修改集合,並且嘗試使用 ,但在沒有父節點 的節點上使用.after(),.before()或.replaceWith()不起作用 - 也就是說,設置或它包含的節點是 已更改。

你的情況,你可以改變

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

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

div.append(clone, remove); 
+0

啊!謝謝!這正是我需要的! – 2015-04-02 15:56:39

+0

不客氣! – adeneo 2015-04-02 16:06:08

1

.after() API jQuery的1.9改變。在你的案例中使用它現在沒有效果。我認爲你應該創建<div>,並明確地將兩個<a>元素分別附加到它。

所以:

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

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

我覺得你的代碼將更具可讀性,如果你想補充像這樣的鏈接:

div.append(clone); 
div.append(remove); 
div.prependTo('#selected_country');