2011-06-28 32 views
1

我的HTML/jQuery代碼看起來是這樣的:jQuery的包裹:返回的結果,但不改變源

<html> 
... 
many code 
... 
    <button onclick="alert($('#mytable').html().wrap('<html/>'));">Show HTML Table</button> 

    <table id="myTable"> 

     <tr's and td's> 
    </table> 
... 
many code 
... 
</html> 

我想我的JavaScript返回由HTML標籤包裹表,但我不希望表本身有待改變。

任何線索?

+1

「我不想表本身改變做。」你的意思是「改變了?」 –

+0

我的意思是由wrap元素(在這種情況下是html)改變。是的,我看到HTML()。wrap不起作用,但我的意思是我想包裝表格的HTML代碼(從

)。 –

回答

3

這不起作用。 .html()返回一個字符串,而不是一個jQuery對象。所以你不能打電話給wrap

另一個問題是,.html()只返回內部HTML,它不包括table標記。

你可以.clone()節點,將其連接到一些虛設的元素,並返回.html()

var html = ['<html><body>', 
      $('<div/>').append($('#mytable').clone()).html(), 
      '</body></html>'].join(''); 
+0

好吧,它有訣竅,但最後我認爲clone()函數並不是必需的,因爲#mytable不會被此操作修改。 –

+1

@ruffp:如果您調用'.append',那麼您傳遞給它的元素將從當前位置移除並添加到新元素。因此,如果您不克隆它,該表將從您的頁面中刪除。 –

+0

好的感謝澄清 –

0

爲什麼不只是做以下?:

alert('<html>'+$('#mytable').html()+'</html>'); 
+1

.html的問題在於它不返回表格定義,只是它裏面有什麼 – Rodolfo

0
$("#myTable").wrap("..."); 

這將包裹表提供給wrap功能的標籤,而不改變table本身。

有關更多信息,請參見的wrap函數。

4

你可以先取表的副本:

$('#mytable').clone()... 

要獲得標籤的實際HTML你需要這樣的插件,我張貼在another answer yesterday

(function($) { 
    $.fn.outerhtml = function() { 
     return $('<div/>').append(this.clone()).html(); 
    }; 
})(jQuery); 

所以你可以這樣做:

alert('<html>' + $('#myTable').outerhtml() + '</html>'); 

請參閱http://jsfiddle.net/alnitak/2y988/進行工作演示。

+0

'html()'返回一個字符串。 '.wrap()'不適用於字符串。 –

+1

@Felix是的,真的 - 我只是複製OP的代碼。同時'.html()'也不會顯示封閉標籤。嗯。 – Alnitak

1

也許這個jQuery outerHTML plugin會幫助你。它會爲您提供表格的代碼,包括附件<table>標籤。你也許可以做點像alert("<html>" + $("#myTable").outerHtml() + "</html>")

相關問題