如何在不改变源的情况下返回结果?

时间:2011-06-28 15:55:50

标签: javascript jquery html

我的HTML和JavaScript代码如下所示:

<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标记包装的表格,但我不希望表格本身被更改。

5 个答案:

答案 0 :(得分: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/

答案 1 :(得分:3)

这不起作用。 .html()返回一个字符串,而不是jQuery对象。因此,您无法在其上调用wrap

另一个问题是.html()只返回内部HTML ,它不包含table标记。

您可以.clone()节点,将其附加到某个虚拟元素并返回.html()

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

答案 2 :(得分:1)

也许这个jQuery outerHTML plugin会对你有所帮助。它将为您提供表格的代码,包括封闭的<table>标签。您可以执行alert("<html>" + $("#myTable").outerHtml() + "</html>")之类的操作。

答案 3 :(得分:0)

为什么不执行以下操作?:

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

答案 4 :(得分:0)

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

这会将表格包装在提供给wrap函数的标记中,而不会改变table本身。

有关详情,请参阅wrap功能的jQuery API