Как заменить весь контент HTML с Javascript? - PullRequest
0 голосов
/ 11 октября 2019

Я пытался использовать $("html").html(this.responseText);. Который заменяет содержимое, но не заменяет теги head и body.

Так, например, если я хочу заменить это содержимое:

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<script>...</script>
<script>...</script>
</head>
<body>

<h1>This is a Heading</h1>


<script>...</script>
</body>
</html>

Затем я проверяю свою HTML-структуру в инспекторе,и результат такой:

<!DOCTYPE html>
<html>
<title>Page Title</title>
<script>...</script>
<script>...</script>

<h1>This is a Heading</h1>

<script>...</script>

</html>

И это так испортило мой css. Я пробовал без сценариев, и он работал нормально. Каково решение этой проблемы?

Я также пробовал использовать подход javascript

document.open();
document.write(this.responseText);
document.close(); 

Но это сбивает с толку мои javascript. Я получаю ошибку синтаксиса объявления.

Мой реальный код, который я хочу реализовать:

<script>

        var frm = $('#frm');
        var submitActors = frm.find('input[type=submit]');
        var submitActor = null;
        submitActors.click(function(event) {
                submitActor = this;  
        });

        frm.unbind('submit').submit(function () {

            var formAction = document.getElementById("frm").getAttribute('action'); // Get the form action.
            var data = "";
            var pageUrl = "";
            var test_uuid = "";
            var test_number = "";
            var qid = JSON.parse(sessionStorage.getItem('userChoice')).qid;



            if(submitActor.name == "cmdSave"){
                data = {
                    "cmdSave" : $("#cmdSave").val(),
                    "Answer": document.querySelector('input[name="Answer"]:checked').value,
                    "csrfmiddlewaretoken": document.querySelector('input[name=csrfmiddlewaretoken').value,
                    "qid": qid
                }
            }
            else if(submitActor.name == "cmdNext"){
                data = {

                    "cmdNext": document.querySelector('#cmdNext').value,
                    "csrfmiddlewaretoken":document.querySelector('input[name=csrfmiddlewaretoken').value,
                    "qid": qid
                }
            }
            var httpRequest = new XMLHttpRequest();
            var formData = new FormData();



            Object.keys(data).forEach(function(key) {
                console.log(key, data[key]);
                formData.append(key, data[key]);
            });
                console.log(formData)
            httpRequest.onreadystatechange = function(){
                if ( this.readyState == 4 && this.status == 200 ) {
                var response = this.responseText;
                    console.log(this.responseText) // Display the result inside result element.

                    // 1.Option
                    {% comment %} document.open();
                    document.write(this.responseText);
                    document.close(); {% endcomment %}

                    // 2.Option

                    {% comment %} document.documentElement.innerHTML = this.responseText;  {% endcomment %}


                    // 3.Option
                    $(document).ready(function(){
                        $("html").html(response);
                    });


                    test_number = document.getElementById("lblNrCrt").textContent;  
                    test_uuid = "{{test.uuid}}";
                    pageUrl = "/intro/" + test_uuid + "/" + test_number + "/";
                    window.history.pushState('', '', pageUrl);
                }
            };

            httpRequest.open("post", formAction);
            httpRequest.send(formData);

            return false;

        });

</script>

Ответы [ 4 ]

0 голосов
/ 11 октября 2019

Я тестировал ниже код работает! ...

let responseTxt="<html> \
<head><title>changed hello</title></head><body><h1>Changed body</h1></body></html>"
$(document).ready(()=>{
 $(".action").click(()=>{
  $("html").html(responseTxt)
 });

});
<html>
<head><title>hello</title></head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<body>
<h1>hello</h1>
<button class="action">Change HTML</button>
</body>
</html>
0 голосов
/ 11 октября 2019

Как я уже говорил, это можно сделать

document.querySelector('html').innerText = 'yolo';

Но если вам нужно визуализировать HTML, вам нужно сделать

document.querySelector('html').innerHTML = '<div>yolo</div>';
0 голосов
/ 11 октября 2019

найдите содержимое тега в вашей строке: function getByTag(tagname,htmlVal) { var tagHtmValue = $(htmlVal).find(tagname).html(); return tagHtmValue; }

замените заголовок и содержимое тела на тело и заголовок в вашем ответе:

$("head").html(getByTag("head",this.responseTex)); $("body").html(getByTag("body",this.responseTex));

0 голосов
/ 11 октября 2019

JS: С помощью innerHTML вы можете заменить все html-содержимое элемента.

document.querySelector('html').innerHTML = '...'

Jquery:

$( document ).ready(function() {
  $('html').html('...');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...