Jak mogę sprawdzić, czy treść generowane przez JavaScript jest prawidłowy HTML? Na przykład, następujący dokument przejdzie statyczne walidacja HTML (np. Walidator

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>test</title>
        <script>
            window.onload = function() {
                var text = document.createTextNode('nested anchor');
                var anchor = document.createElement('a');
                var nested_anchor = document.createElement('a');
                nested_anchor.appendChild(text);
                anchor.appendChild(nested_anchor);
                document.getElementsByTagName('body')[0].appendChild(anchor);
            };
        </script>
    </head>
    <body>
        <p>test</p>
    </body>
</html>

Jednak wyjście zawiera kotwicę wewnątrz innego elementu kotwiącego, który nie jest ważny zgodnie z specyfikacją HTML5. Czy jest jakiś sposób sprawdzenia tych błędów?

4
user993096 13 październik 2011, 13:28

4 odpowiedzi

Najlepsza odpowiedź

Możesz wyprowadzać wynikowy HTML jako łańcuch, osadza go w prawidłowym dokumencie i wysłać go do walidacji. W twoim przypadku przy użyciu jQuery var htmlText = $(anchor).html().

Lub nawet prostsze, wyjście całe wynikowe HTML {X0}}

3
solendil 13 październik 2011, 09:44

Możliwość korzystania z funkcji walidacja lokalnego HTML Web Pasek narzędzi Deweloper (Chrome & amp; Firefox). Ta funkcja będzie używać Wortyator W3, aby potwierdzić wygenerowane HTML.

Zamiast pobierać przedłużenie, możesz również użyć mojego Bookmarklet JavaScript do Sprawdź poprawność lokalny Html. Utwórz zakładkę i wklej poniższy kod w polu "URL". Następnie, gdy chcesz zatwierdzić lokalnego HTML, kliknij na bookmarklet.
Poniższy kod jest samodzielny i nie wymaga żadnych ram.

javascript:void(function(){
    var form = document.createElement("form");
    form.method = "POST";
    form.enctype = "multipart/form-data";
    form.action = "http://validator.w3.org/check";
    form.target = "_blank";

    /* Get local HTML*/
    var html = "<html>" + document.documentElement.innerHTML + "</html>";
    var post_data = {
        fragment: html,/*Settings for validator*/
        prefill: "0",
        doctype: "HTML5",
        prefill_doctype: "html401",
        group: "0",
        ss: "1",
        outline: "1"
    };
    for(var name in post_data){
        (function(){
            var t = document.createElement("textarea");
            t.name = name;
            t.value = post_data[name];
            form.appendChild(t)
        })()
    }
    document.body.appendChild(form);
    form.submit(); /* Open validator, in new tab*/
    document.body.removeChild(form);
})()
2
Rob W 13 październik 2011, 09:54

"Wystarczy zapisać źródło HTML po całkowitym załadowaniu i użyciu tego pliku statycznego do walidacji".

Przywróciłbym, gdyby to zadziałało, że przeglądarka naprawiłaby wiele problemów, gdy potrzeba przyciągania strzału HTML z Domu.

1
user2323922 17 czerwiec 2013, 13:17

Wystarczy zapisać źródło HTML po pełnym załadowaniu i użyciu tego statycznego pliku do walidacji.

0
frisco 13 październik 2011, 09:51