Javascript html()删除脚本和样式

Javascript html()删除脚本和样式,javascript,jquery,html,coding-style,Javascript,Jquery,Html,Coding Style,有没有一种方法可以使用jQuery.html()而不丢失脚本和样式?或者任何其他非jQuery方式 我试图输出用户所在页面的完整HTML。这可能吗 html()删除脚本和样式 这不是我的经验(见下文)。在实践中,您必须意识到,通过查询DOM中的HTML字符串得到的结果总是经过解释的HTML,而不是原始的HTML,并且会有一些奇怪之处(例如,在IE上,所有HTML标记名都是大写的)。这是因为jQuery的html函数依赖于浏览器的innerHTML属性,该属性在不同浏览器中略有不同。但下面的演示包

有没有一种方法可以使用jQuery.html()而不丢失脚本和样式?或者任何其他非jQuery方式

我试图输出用户所在页面的完整HTML。这可能吗

html()删除脚本和样式

这不是我的经验(见下文)。在实践中,您必须意识到,通过查询DOM中的HTML字符串得到的结果总是经过解释的HTML,而不是原始的HTML,并且会有一些奇怪之处(例如,在IE上,所有HTML标记名都是大写的)。这是因为jQuery的
html
函数依赖于浏览器的
innerHTML
属性,该属性在不同浏览器中略有不同。但下面的演示包括Chrome4、IE7和Firefox3.6上的样式和脚本标签;我没有试过其他的,但我希望他们没事

如果您想获得外部链接页面的内容以及内联内容,您自然需要解析结果并遵循
src
(在
script
s上)、
href
(在
link
s上具有
rel
=“样式表”)等

演示:


测试页
身体{
字体系列:无衬线;
}
(功能(){
$(文档).ready(pageInit);
函数pageInit(){
$('btnGo')。单击(go);
}
函数go(){
警报($('html').html());
}
})();

我在这里看到两种情况

  • 您使用jQuery.html(yourHTML)覆盖页面的整个html,因此即使脚本标记也被覆盖
  • 您可以使用jQuery.html()检索整个文档html。如果是这种情况,您需要确保使用.html()函数的元素是整个html。。。正如T.J.Crowder所建议的
    $('html').html()

  • 我不确定我是否完全理解你。如果您不想丢失脚本和样式,而这些脚本和样式似乎只想修改body标记的内容。是这样吗?或者你也想在头部添加新的脚本和样式?在这种情况下,您应该在单独的函数上注册样式和脚本。然后附加你的身体内容。您甚至可以使用JS动态设置doctype和所有内容。所以应该都很好你用什么浏览器?
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
    <title>Test Page</title>
    <style type='text/css'>
    body {
        font-family: sans-serif;
    }
    </style>
    <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'></script>
    <script type='text/javascript'>
    (function() {
        $(document).ready(pageInit);
    
        function pageInit() {
            $('#btnGo').click(go);
        }
    
        function go() {
            alert($('html').html());
        }
    })();
    </script>
    </head>
    <body>
    <input type='button' id='btnGo' value='Go'>
    </body>
    </html>