2011-05-11 71 views
0

我正在用AJAX調用返回的HTML替換DOM節點。返回的HTML有一個id,並且具有該id的DOM節點將被替換。JQuery replaceWith問題

回調函數

function updateTrip(xml, success, jqXHR) { 
    var para = $(xml); 
    var id = para.attr('id'); 
    $("#"+id).replaceWith(para); 
} 

未能更換節點儘管具有固定ID的作品,並且等效的原始JavaScript函數相同的代碼也適用

function updateTrip(xml, success, jqXHR) { 
    var para = $(xml).get(0); 
    var id = para.getAttribute('id'); 
    var div = document.getElementById(id); 
    div.parentNode.replaceChild(para, div); 

}

的ID看起來像n-1.12.2.2.4;內容類型是text/html;在FF錯誤控制檯中沒有報告錯誤。

+0

你有沒有試圖改變最後一行到$( 「#」 + ID).replaceWith(XML); ? – 2011-05-11 22:19:35

+0

var id = para.attr('id'); alert(id) - >顯示正確的一個? – ariel 2011-05-11 22:50:00

回答

2

問題出在您編號的.,您需要轉義.以使選擇器正常工作。

例子:

$("#n-1\\.12\\.2\\.2\\.4")

有了這樣說,最簡單的辦法是使用document.getElementById()和簡單的使用.replaceWith()

function updateTrip(xml, success, jqXHR) { 
    var para = $(xml); 
    var id = para.attr('id'); 
    var a = document.getElementById(id); 
    $(a).replaceWith(para); 
} 

Example on jsfiddle

,或者如果你想去做replace()選項它是這樣的:

function updateTrip(xml, success, jqXHR) { 
    var para = $(xml); 
    var id = para.attr('id').replace(/\./g, '\\.'); 
    $('#' + id).replaceWith(para); 
} 

Example on jsfiddle

+0

建議避開身份證中的時間段,即使他們被允許,它會引起混亂和其他選擇器庫中的混亂。 [這篇文章很好地解釋。](http://stackoverflow.com/questions/70579/what-are-valid-values-for-the-id-attribute-in-html/72577#72577) – Orbling 2011-05-11 22:57:22

+0

謝謝你的答案 - 更小的JavaScript版本可以正常工作,但我必須考慮重新編碼ID – 2011-05-12 06:37:37