En mi sitio web hay algunos elementos <Style> duplicados en DOM. Estoy tratando de usar un conjunto en JavaScript para eliminar la duplicación de estos elementos. El código para generar elementos no duplicados es algo así como:
const CSSCache = new Set<HTMLStyleElement>(); const styles = document.getElementsByTagName('style'); for (let i = 0; i < styles.length; i++) { CSSCache.add(styles[i] as HTMLStyleElement); }Me pregunto si el conjunto de JavaScript puede personalizar estos objetos HTMLStyleElement.
Además, algunos de estos elementos no tienen ningún contenido, por ejemplo, <style></style> pero tienen reglas en element.sheet.cssRules insertadas con insertRule ( https://developer.mozilla.org/en-US/docs /Web/API/CSSStyleSheet/insertRule ). Me pregunto si Set también funciona para este tipo de estilo.
Un conjunto contiene valores que son únicos a través del algoritmo Object.is , que es casi igual a cómo funciona === .
Los objetos <style> separados en la página, independientemente del contenido, no son === , por lo que obtendrá un Conjunto con todos los <style> s en la página con su código actual.
Lo mismo se aplica a cualquier HTMLElement, e incluso a los objetos sin formato.
const set = new Set(); const obj1 = {}; const obj2 = {}; set.add(obj1); set.add(obj2); console.log(set.size);Si desea desduplicar, tendrá que ir por otra ruta, como iterar a través de las reglas de cada estilo.