2010-05-20 47 views
1

有没有办法使用jQuery.html()而不是松散的脚本和样式?或任何其他非jQuery的方式?jQuery.html()删除脚本和样式

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

+0

我不知道我是否完全理解你。如果您不想丢失脚本和样式,而您似乎只想修改body标签的内容。是对的吗?或者您想要将新的脚本和样式添加到头部?在这种情况下,您应该在独立功能上注册样式和脚本。然后追加你的身体内容。你甚至可以用JS动态设置doctype和一切。所以它应该都很好 – XGreen 2010-05-20 11:59:47

+0

你使用什么浏览器? – 2010-05-20 12:08:14

回答

2

jQuery.html()删除脚本和样式

那不是我的经验(见下文)。在实践中,您必须意识到,通过查询HTML字符串获取的DOM总是会被解释为 HTML,而不是原始的,并且会出现怪癖(例如,在IE上,所有的HTML标记名字是大写)。这是因为jQuery的html函数依赖于浏览器的innerHTML属性,该属性在浏览器和浏览器之间略有不同。但下面的演示包括Chrome 4,IE7和Firefox 3.6上的样式和脚本标签;我没有尝试别人,但我希望他们没事。

如果你想获得外部链接的网页,以及内联内容的内容,你自然会对解析结果,并按照src(上script S),href(上link S作rel = “样式表”),等等

演示:

<!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> 
0

我看到2种情景这里

  1. 您使用jQuery.html(yourHTML)覆盖整个页面的html,所以即使脚本标签被覆盖...
  2. 您使用jQuery.html()检索整个文档html。如果是这种情况,你需要确保使用.html()函数的元素是整个html ......就像T.J.克罗德建议$('html').html()