2014-02-12 157 views
0

我不太擅長jQuery,我需要你的幫助。首先,讓我解釋一下情況。我有一個HTML表是這樣的:如何刪除一個孩子並得到父母

<table id="table"> 
<tr><td><img class="image" />test</td><td></td></tr> 
<tr><td><img class="image" />test</td><td></td></tr> 
</table> 

我需要做的是讓表的全部內容:$(「#表」)HTML(),但沒有img標籤。 (但我不希望刪除他們在原創內容,僅在「複製」的內容)

我想類似的東西: $('#table').clone().find('.image').remove().parent().parent().html()

但它是不確定的(我猜的元素被刪除,我無法訪問它並獲得父項)。 你會怎麼做?

感謝

編輯:嘗試解釋更好,結果我需要的是:

<table id="table"> 
<tr><td>test</td><td></td></tr> 
<tr><td>test</td><td></td></tr> 
</table> 
+0

只有'$( '#報告')的clone()找到( 'plusImage')刪除()'好 – Satpal

回答

6

$('#report').clone().find('.plusImage').remove().html()不會返回表的內容。

// First clone table and save it to a new variable 
var clonedTable = $('#table').clone(); 

// remove all img tags 
clonedTable.find('img').remove(); 

// test it 
console.log(clonedTable.html()); 

您還可以使用正則表達式從字符串沒有克隆DOM中刪除:

var contentWithoutImg = $('#table').html().replace(/<img[^>]+\>/ig, ''); 
console.log(contentWithoutImg); 
+0

爲什麼不(可靠)克隆DOM? – fast

+0

用於正則表達式的方法 – newTag

+0

@fast AFAIK正則表達式工作得更快。也許我錯了。 – Hast

3

你不能鏈表中,以remove()的方法,因爲它返回的是元素除去。 Hast has posted the proper answer,但如果你認爲你需要的不僅僅是這一次更多,想創建自己的方法來刪除兒童和返回容器,你可以使用以下命令:

$.fn.removeDesc = function(sel){ 
    return this.each(function(){ 
     $(this).find(sel).remove(); 
    }); 
} 

然後,您可以使用它像這樣:。

var tableHTML = $('#report').clone().removeDesc('.plusImage').html(); 

JSFiddle

+0

是的,這是一個很好的補充,謝謝。 – Hast

+0

嗯,實際上鍊條從find()上的#table移開。 $('#table')。remove()會返回表。 – fast

相關問題