就地替换整个HTML文档

jam*_*mes 9 html jquery in-place

我试图避免使用数据URI,因为我不希望生成的文档存储在浏览器的历史记录中.是否可以就地替换整个HTML文档?

我试过了jQuery("html").html("<html>....</html>"),但style信息无法生存.

T.J*_*der 14

你可能想这样做:

jQuery("body").html("new content");
Run Code Online (Sandbox Code Playgroud)

... "new content"理想情况下,只包括通常出现在body元素内而不是其余部分的标记.这将取代身体元素的内容,同时留下你所拥有的任何东西head(如样式表信息).如果您还想更新标题,可以通过document.title = "new title";

编辑我想知道更换元素内部的所有html内容,是否可行,以及会发生什么.所以我这样做了:

<!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;
    font-weight: bold;
    color:       blue;
}
</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() {
        $('#btnChange').live('click', changePage);
        $('#btnHiThere').live('click', sayHi);
    }

    function changePage() {
        $('html').html(
            "<head><\/head>" +
            "<body>" +
            "<input type='button' id='btnHiThere' value='Click for Alert'>" +
            "<p>Note how this text now looks.<\/p>" +
            "<\/body>"
        );
    }

    function sayHi() {
        alert("Hi there");
    }
})();
</script>
</head>
<body>
<input type='button' id='btnHiThere' value='Click for Alert'>
<input type='button' id='btnChange' value='Change Page'>
<p>Note now this text current appears in a sans-serif, bold, blue font.</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

而结果是相当有趣-我最终不具有一个DOM结构headbody 在所有,只是html用的后裔headbody内部.这可能是在新内容中弄乱(新)样式的原因.我innerHTML直接获得了基本相同的结果设置(这可能就是为什么它在jQuery中不起作用; jQuery innerHTML在它可以使用的时候,虽然它不是很复杂但不能这样做); 而如果我通过明确创建类似的东西head,并body通过元素document.createElementdocument.appendChild,它的工作原理.

所有这些几乎肯定意味着这比它的价值更多的努力.

但是:请注意,更改内容headbody元素似乎就好了工作:

<!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;
    font-weight: bold;
    color:       blue;
}
</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() {
        $('#btnChange').live('click', changePage);
        $('#btnHiThere').live('click', sayHi);
    }

    function changePage() {
        $('head').html(
            "<style type='text/css'>\n" +
            "body { color: green; }\n" +
            "<\/style>\n"
        );
        $('body').html(
            "<input type='button' id='btnHiThere' value='Click for Alert'>" +
            "<p>Note how this text now looks.<\/p>"
        );
    }

    function sayHi() {
        alert("Hi there");
    }
})();
</script>
</head>
<body>
<input type='button' id='btnHiThere' value='Click for Alert'>
<input type='button' id='btnChange' value='Change Page'>
<p>Note now this text current appears in a sans-serif, bold, blue font.</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

因此,如果您将"页面"分开加载到头部和身体部位,则可以轻松地将其更新到位.