JQuery html() vs. innerHTML

后端 未结 7 1930
不知归路
不知归路 2020-11-28 22:08

Can I completely rely upon jQuery\'s html() method behaving identical to innerHTML? Is there any difference between innerHTML and jQue

相关标签:
7条回答
  • 2020-11-28 23:08

    Specifically regarding "Can I rely completely upon jquery html() method that it'll perform like innerHTML" my answer is NO!

    Run this in internet explorer 7 or 8 and you'll see.

    jQuery produces bad HTML when setting HTML containing a <FORM> tag nested within a <P> tag where the beginning of the string is a newline!

    There are several test cases here and the comments when run should be self explanatory enough. This is quite obscure, but not understanding what's going on is a little disconcerting. I'm going to file a bug report.

    <html>
    
        <head>
            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>   
    
            <script>
                $(function() {
    
                    // the following two blocks of HTML are identical except the P tag is outside the form in the first case
                    var html1 = "<p><form id='form1'><input type='text' name='field1' value='111' /><div class='foo' /><input type='text' name='field2' value='222' /></form></p>";
                    var html2 = "<form id='form1'><p><input type='text' name='field1' value='111' /><div class='foo' /><input type='text' name='field2' value='222' /></p></form>";
    
                    // <FORM> tag nested within <P>
                    RunTest("<FORM> tag nested within <P> tag", html1);                 // succeeds in Internet Explorer    
                    RunTest("<FORM> tag nested within <P> tag with leading newline", "\n" + html1);     // fails with added new line in Internet Explorer
    
    
                    // <P> tag nested within <HTML>
                    RunTest("<P> tag nested within <FORM> tag", html2);                 // succeeds in Internet Explorer
                    RunTest("<P> tag nested within <FORM> tag with leading newline", "\n" + html2);     // succeeds in Internet Explorer even with \n
    
                });
    
                function RunTest(testName, html) {
    
                    // run with jQuery
                    $("#placeholder").html(html);
                    var jqueryDOM = $('#placeholder').html();
                    var jqueryFormSerialize = $("#placeholder form").serialize();
    
                    // run with innerHTML
                    $("#placeholder")[0].innerHTML = html;
    
                    var innerHTMLDOM = $('#placeholder').html();
                    var innerHTMLFormSerialize = $("#placeholder form").serialize();
    
                    var expectedSerializedValue = "field1=111&field2=222";
    
                    alert(  'TEST NAME: ' + testName + '\n\n' +
                        'The HTML :\n"' + html + '"\n\n' +
                        'looks like this in the DOM when assigned with jQuery.html() :\n"' + jqueryDOM + '"\n\n' +
                        'and looks like this in the DOM when assigned with innerHTML :\n"' + innerHTMLDOM + '"\n\n' +
    
                        'We expect the form to serialize with jQuery.serialize() to be "' + expectedSerializedValue + '"\n\n' +
    
                        'When using jQuery to initially set the DOM the serialized value is :\n"' + jqueryFormSerialize + '\n' +
                        'When using innerHTML to initially set the DOM the serialized value is :\n"' + innerHTMLFormSerialize + '\n\n' +
    
                        'jQuery test : ' + (jqueryFormSerialize == expectedSerializedValue ? "SUCCEEDED" : "FAILED") + '\n' +
                        'InnerHTML test : ' + (innerHTMLFormSerialize == expectedSerializedValue ? "SUCCEEDED" : "FAILED") 
    
                        );
                }
    
            </script>
        </head>
    
        <div id="placeholder">
            This is #placeholder text will 
        </div>
    
    </html>
    
    0 讨论(0)
提交回复
热议问题