2013-04-18 15 views
1

場景:我希望通過AJAX將元素列表返回給瀏覽器。使用JAXB進行編組,並且由於XML需要一個根元素(JSON不會......),我將這個列表包裹在一個信封(包裝器)元素中。現在在客戶端(瀏覽器),我希望刪除外部元素,留下完整的元素列表。然後我希望將提取的元素列表放入HTML Dom中。我怎樣才能做到這一點?如何刪除AJAX XML Response的外部元素

例澄清:

希望發送:

<tr><td>data</td></tr><tr><td>data</td></tr> 

由於對文本/ XML響應類型限制(爲了符合XML),我包裹此爲:

<tbody><tr><td>data</td></tr><tr><td>data</td></tr></tbody> 

所以在我的jquery回調方法中,我收到上述(作爲xml對象)。我怎樣才能(除了無論什麼作品都沒有特別的順序)移除tbody元素,並確保剩下的tr標籤是可接受的domData。我玩find(),filter()等,但仍然沒有解決這兩個要求。

謝謝大家誰已經回覆!這一個真的讓我感到困擾。在沒有測試所有提供的答案的情況下,似乎有多種方法可以做到這一點,並且可能將每個答案都標記爲正確答案。我實際上是這樣的:

}).done(function(xmlResponse) { 
    $strData = xmlToString(xmlResponse); 
    $html = $($strData); 
    $('#mytable tbody').html($html.contents()); 
}); 

出於某種原因,沒有明確的標註將xml首先轉換爲字符串,它不起作用。此後,在$()中包裝字符串將其強制爲符合DOM,然後content()方法負責提取(移除)外部元素。

這裏是xmlToString()方法。如果任何人都可以指出我如何消除這種醜陋的方法的需要,那肯定是一種獎勵。它看上去就像一個預2009年的HTML應用程序:

function xmlToString(xmlData) { 
    var xmlString; 
    if (window.ActiveXObject){ 
    xmlString = xmlData.xml; 
    } else{ 
    xmlString = (new XMLSerializer()).serializeToString(xmlData); 
    } 
    return xmlString; 
} 

我將迎來第一個答案我閱讀的基礎是正確的,這是足以讓我過了終點線。

回答

0

您可以使用.contents()來提取根元素的內容:

$html = $('<tbody><tr><td>data</td></tr><tr><td>data</td></tr></tbody>'); 
$html.contents().appendTo('#something-else'); 
0

試試這個 -

$(xml).find('tbody').contents().unwrap(); 

Working Demo

+0

穆罕默德 - 感謝您的有益建議。當我在jsFiddle中嘗試它時,你的示例沒有運行:如果我註釋掉上面給出的那一行,那麼它運行正常。有任何想法嗎? – arcseldon

0

只要找到TBODY的兒童。想象中的「數據」變量包含通過AJAX接收到的數據:

var $shard = $(data).children(); 

$('.something').append($shard); 

解釋:

$(data) // creates the dom shard. 
$(data).children(); // selects it's children, which is everything except the tbody 
0

您可以使用replaceWith來取代它與它的孩子們(那將讓他們):

$(xml).children("tbody").replaceWith($(xml).children("tbody").children());