J'essaie d'éviter d'utiliser un URI de données car je ne souhaite pas que le document généré soit stocké dans l'historique du navigateur. Est-il possible de remplacer le document HTML entier sur place? J'ai essayé jQuery("html").html("<html>....</html>")
, mais les informations style
ne survivent pas.Remplacer le document HTML entier en place
Répondre
Vous voulez probablement faire ceci:
jQuery("body").html("new content");
... où "new content"
comprendrait idéalement que le balisage qui normalement apparaître dans l'élément body
et non le reste. Cela remplacera le contenu de l'élément de corps, tout en laissant tout ce que vous avez dans head
(comme les informations de feuille de style) seul. Si vous souhaitez également mettre à jour le titre, vous pouvez le faire si cela pourrait fonctionner via document.title = "new title";
Modifier Je me suis demandé de remplacer tout intérieur de l'élément html
, et ce qui se passerait. Alors je l'ai fait:
<!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>
Et les résultats ont été tout à fait intéressant — je me retrouve avec une structure DOM qui ne dispose pas d'un head
ou body
du tout, juste html
avec les descendants de head
et body
à l'intérieur. C'est probablement ce qui gâche le (nouveau) style dans le nouveau contenu. Je reçois essentiellement le même résultat innerHTML
directement (ce qui peut expliquer pourquoi cela ne fonctionne pas dans jQuery; jQuery utilise innerHTML
quand il le peut, bien qu'il soit très sophistiqué de ne pas le faire quand il ne le peut pas); alors que si je fais quelque chose de similaire en créant explicitement les éléments head
et body
via document.createElement
et document.appendChild
, cela fonctionne.
Tout cela signifie presque certainement que c'est plus d'effort que cela en vaut la peine.
Mais: Notez que la modification du semble fonctionner très bien contenu des éléments head
et body
:
<!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>
Donc, si vous séparez la « page » vous chargez dans des parties de la tête et le corps , vous pouvez facilement le mettre à jour en place.
il n'est donc pas possible de charger un nouveau tag
? – james@james: Cela peut être * possible *, mais si vous le faites, vous devrez vous assurer qu'il contient tout ce que vous voulez avoir (comme les références de feuille de style). Vous n'avez probablement pas à vous soucier de la maintenance des balises de script; Une fois que le script a été chargé et évalué, il n'est plus lié à l'élément qui l'a créé et la suppression de l'élément n'a aucun effet sur le script. –
Je noterai (très tard, oui), que la présence de lourds JS dans la tête (grâce à Optimizely ou Ensighten, par exemple), peut rendre même le remplacement du corps intenable. –
Non jquery:
var newString = [
"<!doctype html>"
, "<html>"
, "<head>"
, "</head>"
, "<body>"
, "<h1>new content</h1>"
, "</body>"
, "</html>"
].join("");
document.getElementById('myIframeId').contentDocument.documentElement.outerHTML = newString;
- 1. Comment trouver et remplacer par programme dans ENTIER Word document
- 2. Parse document entier html et remplacer les pièces spécifiques de celui-ci automatiquement PHP
- 3. Obtenir le décalage du nœud dans le document html entier en Javascript?
- 4. Un document XPathDocument charge-t-il le document XML entier?
- 5. Remplacer l'image dans le document Word en utilisant OpenXML
- 6. XSLT: nécessité de remplacer le document ('')
- 7. en utilisant sed pour remplacer le mot entier contenant '='?
- 8. trouver le mot-clé en particulier div seulement plutôt que le document entier
- 9. Parse Document HTML?
- 10. Remplacer l'entourage d'un élément html par un autre document
- 11. Comment remplacer l'élément DOM en place en utilisant Javascript?
- 12. PHP Curl obtenir le code HTTP, pas le document entier
- 13. Remplacer le texte html javascript inclut
- 14. Remplacer le contenu HTML entier tue les balises HEAD et BODY après la requête HTTP!
- 15. Html Agility Pack - Récupère le fragment html d'un document html
- 16. Remplacer le document dans la boîte de dialogue modale IE
- 17. problème lorsque je place javascript $ (document) .ready
- 18. Traitement XML sans chargement du document entier en mémoire?
- 19. Comment remplacer un élément DOM en place avec jQuery?
- 20. redimensionnement du texte du document entier en utilisant jquery
- 21. Comment remplacer du texte dans un document html sans affecter le balisage?
- 22. Remplacer les derniers chiffres d'un entier
- 23. Module Python pour convertir le document en html
- 24. Vérifier l'élément actif dans le document HTML en utilisant JavaScript
- 25. Embedding Javascript dans le document html
- 26. Mettre en place un signet HTML en JavaScript
- 27. Recherche d'un document HTML en PHP
- 28. Remplacer le texte spécifique dans le document par javascript?
- 29. Regex remplacer entier entre deux symboles livre/hachage en php
- 30. rechercher et remplacer dans le projet entier sur linux/osx
Je suis confus par votre déclaration « informations de style ne survit pas », les styles seront liés à ou inclus dans le document, donc si vous remplacez le document en entier vous le feriez attendre les styles à se perdre? Avez-vous vraiment besoin de remplacer le/whole/document? Qu'est-ce que vous essayez d'atteindre du point de vue des visiteurs? –
désolé, je voulais dire que les * nouvelles * informations de style, .html ("... ..."), ne survivent pas. – james
Je ne savais pas que vous parliez de * new * style info. Ce commentaire m'a fait me demander; J'ai mis à jour ma réponse un peu. –