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

JavaScript“设置”是否适用于HTMLStyleElement对象?

  •  0
  • flyingbee  · 技术社区  · 3 年前

    在我的网站上有一些复制品 <Style> DOM中的元素。我试图使用JavaScript中的一个集合来对这些元素进行重复数据消除。生成非dup元素的代码如下:

    const CSSCache = new Set<HTMLStyleElement>();
    const styles = document.getElementsByTagName('style');
    for (let i = 0; i < styles.length; i++) {
       CSSCache.add(styles[i] as HTMLStyleElement);
    }
    

    我想知道JavaScript是否能够唯一地定义这些HTMLStyleElement对象。

    此外,其中一些元素没有任何内容,例如。 <style></style> 但他们在元素中有规则。床单使用insertRule插入的cssRules( https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/insertRule ).我想知道Set是否也适用于这些类型的款式。

    1 回复  |  直到 3 年前
        1
  •  1
  •   CertainPerformance    3 年前

    集合包含通过 Object.is 算法,这和 === 作品

    分离 <style> 无论内容如何,页面上的对象都不会 === ,这样你就可以得到一套 <风格> 在页面上显示您当前的代码。

    这同样适用于任何HTMLElement,甚至适用于普通对象。

    const set = new Set();
    const obj1 = {};
    const obj2 = {};
    set.add(obj1);
    set.add(obj2);
    console.log(set.size);

    如果你想消除重复,你必须走另一条路——比如迭代每种风格的规则。