代码之家  ›  专栏  ›  技术社区  ›  Hooman Bahreini

为什么jQuery html()方法将内容添加到段落而不是替换它?

  •  2
  • Hooman Bahreini  · 技术社区  · 6 年前

    为什么是jQuery html() <p> 标记而不是替换它?

    function refresh() {
        $('#pContainer').html('<div>updated...</div>');
    }
     
     $(document).ready(function ($) {
        window.setInterval(refresh, 3000);
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <p id='pContainer'>
        <div>paragraph text remains</div>
    </p>

    万一 div

    function refresh() {
        $('#divContainer').html('<div>updated...</div>');
     }
     
     $(document).ready(function ($) {
        window.setInterval(refresh, 3000);
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <dic id='divContainer'>
        <div>div text disappears</div>
    </div>
    2 回复  |  直到 6 年前
        1
  •  6
  •   Sebastian Simon SamB    6 年前

    您的HTML无效。一个 <p> 不能有 <div>

    <p id="pContainer">
        </p><div>paragraph text remains</div>
    <p></p>
    

    因此,当您将 #pContainer ,因为浏览器已将 < 外部 < ,和 <分区>

    作为 MDN puts it

    段落是块级元素,尤其是 如果在关闭之前分析了另一个块级元素,则将自动关闭 </p> 标签。

    (相反,有一个 <分区> 在另一个里面 < 完全有效。)

        2
  •  0
  •   Paul Zaslavskij    6 年前

    主要问题是无效的html标记,正如CertainPerformance之前所回答的那样。最好使用一些工具来防止将不兼容的元素包含到其他元素中。

    最简单的方法-使用在线W3CHTML标记验证器。 https://validator.w3.org/