2009-12-10 37 views
20

我對此有一個簡單的問題。

$.ajax({ 
    type: "POST", 
    url: "/", 
    data: $(".form").serialize(), 
    dataType: "html", 
    success: function (data) { 
     $("#id").html(data); 
    } 
}); 

裏面的「數據」是我插入到DOM中的一些html。那沒問題。但是我想在這樣做之前操縱「數據」。我怎樣才能做到這一點?例如「數據」中有一些li元素。我怎麼會例如刪除「數據」字符串中的最後一個li元素,然後再將其插入到DOM中?

我想是這樣

$(data li:last)remove(); 

...但沒有工作。

感謝您的幫助。

回答

30

你並不需要一個隱藏的DIV。如果你想將html字符串轉換爲DOM片段,只需在其上調用jQuery即可。在您的例子:

success: function(data) { 
    var jqObj = jQuery(data); 
    jqObj.find("li:last").remove(); 
    $("#id").empty().append(jqObj); 
} 

有些IE方面的考慮,但:

  • 如果你的數據量大,就地jQuerifying它是在IE慢(至少使用jQuery 1.2.6)。在這種情況下,您可能需要爲其創建一個容器,如var div = jQuery("<div/>"); div.html(data);,然後在執行$("#id").html(div.html())之前對其進行操作。
  • 如果您的數據有無效的HTML(未封閉的標籤等),您可能會在IE中出現奇怪的失敗。只要確保html格式正確即可。
+0

+1沒有意識到你可以做到這一點,非常好。 – Jay 2009-12-10 02:23:17

+0

真棒! thx很多; - D. – Hans 2009-12-10 02:37:35

5

返回的數據是一個字符串,通過jQuery無法在dom中找到,直到它實際上在DOM中。您將需要解析此字符串並提取所需的數據,或者在插入DOM後進行編輯。

+0

感謝Jay的投票。我看到有人投票否決了你的意見,我希望他們在發表評論時發表意見。 – jpsimons 2009-12-10 02:57:29

3

Jay's answer是正確的 - 您需要先將HTML數據插入DOM(或解析字符串,這看起來很麻煩)。你可以做的是將數據追加到一個隱藏DIV,修改它,然後將數據複製到不同的DOM元素或只顯示DIV

8

您可以從任意的HTML jQuery對象,如:

$('<ul><li>Item</li></ul>'); 

所以,你可以做這樣的事情:

success: function(data) { 
    var $list = $(data); 

    $list.find('li:last').remove(); 

    // Do something with $list here, like append(). 
} 

這裏的工作的例子,你可以玩弄對JS Bin:http://jsbin.com/ejule3/edit