代码之家  ›  专栏  ›  技术社区  ›  sudoExclamationExclamation

HTML阴影dom:为什么attachShadow(…).insertAdjacentHTML不起作用,但是attachShadow(…).innerHTML起作用?

  •  0
  • sudoExclamationExclamation  · 技术社区  · 4 年前

    为什么以下两种方法有效:

    document.body.innerHTML = '<div>Test1</div>';
    
    document.body.insertAdjacentHTML('beforeEnd', '<div>Test2</div>');
    

    这同样有效:

    document.body.attachShadow({mode: 'open'}).innerHTML = '<div>Test3</div>';
    

    但以下方法不起作用:

    document.body.attachShadow({mode: 'open'}).insertAdjacentHTML('beforeEnd', '<div>Test4</div>');
    

    Uncaught TypeError: document.body.attachShadow(...).insertAdjacentHTML is not a function

    https://jsfiddle.net/uzdy3fv9/

    2 回复  |  直到 4 年前
        1
  •  1
  •   CertainPerformance    4 年前

    当你这么做的时候

    document.body.innerHTML = '<div>Test1</div>';
    document.body.insertAdjacentHTML('beforeEnd', '<div>Test2</div>');
    

    您正在调用上的方法 Element.prototype .

    影子根不是元素-它们在某些方面相似,但它们不一样。影子根 have certain methods/properties ,包括 .innerHTML .insertAdjacentHTML .

    .insertAdjacentHTML('afterend' 'beforebegin'

        2
  •  1
  •   connexo    4 年前

    Shadow root API根本不提供 insertAdjacentHTML

    请注意,即使 innerHTML 关于影子根不是官方标准的一部分。

    https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot