首页 > 其他分享 >js操作shadow-root内的DOM元素

js操作shadow-root内的DOM元素

时间:2023-02-22 11:26:39浏览次数:33  
标签:style DOM 作用域 元素 js shadow root

其实就是 documentfragment元素,就是动态生成的文档碎片元素。

1,项目中在DOM结构里遇到了shadow-root(open),用JS方法无法直接获取其内的DOM元素

2、shadow DOM

Web components 的一个重要属性是封装——可以将标记结构、样式和行为隐藏起来,并与页面上的其他代码相隔离,保证不同的部分不会混在一起,可使代码更加干净、整洁。其中,Shadow DOM 接口是关键所在,它可以将一个隐藏的、独立的 DOM 附加到一个元素上。shadow-root包裹下的对象,不在全局的DOM树中,因此getElementById 等方法,获取不到包裹中的对象。

Shadow DOM 这款工具旨在构建基于组件的应用。因此,可为网络开发中的常见问题提供解决方案:
隔离 DOM:组件的 DOM 是独立的(例如,document.querySelector() 不会返回组件 shadow DOM 中的节点)。
作用域 CSS:shadow DOM 内部定义的 CSS 在其作用域内。样式规则不会泄漏,页面样式也不会渗入。
组合:为组件设计一个声明性、基于标记的 API。
简化 CSS - 作用域 DOM 意味着您可以使用简单的 CSS 选择器,更通用的 id/类名称,而无需担心命名冲突。
效率 - 将应用看成是多个 DOM 块,而不是一个大的(全局性)页面。
Shadow DOM 与普通 DOM 相同,但有两点区别:

创建/使用的方式;
与页面其他部分有关的行为方式。
通常,您创建 DOM 节点并将其附加至其他元素作为子项。 借助于 shadow DOM,您可以创建作用域 DOM 树,该 DOM 树附加至该元素上,但与其自身真正的子项分离开来。这一作用域子树称为影子树。被附着的元素称为影子宿主。

简单的意思就是可以用来独立建立一块渲染块,不受外层样式的影响,内层的样式也不影响外层的显示。

三、操作shadow-root内的元素
1.先获取shadow-root的父级节点,然后用shadowRoot取得这个父级节点的shadow块,然后就可以进行操作了

document.querySelector('#root').shadowRoot.querySelector('.chakra-portal')


2.在shadow块下面创建style标签,在里面添加样式

let gtx = document.querySelector("#root");
let style = document.createElement("style");
style.innerHTML =
".grid_wrap { display: flex;justify-content: center;align-items: center;}";
gtx.shadowRoot.appendChild(style);
相关资料:使用 shadow DOM - Web Components | MDN

参考:https://blog.csdn.net/qq_44376306/article/details/128552574

 

标签:style,DOM,作用域,元素,js,shadow,root
From: https://www.cnblogs.com/wgscd/p/17143661.html

相关文章

  • cpp generate template random number
    #include<iostream>#include<random>template<typenameT>Tgen_random(Tmin,Tmax){std::random_devicerd;std::mt19937_64mt(rd()......
  • iOS Swift开发中JSON对象/JSON字符串/Data的互转
    https://www.jianshu.com/p/712bb9a60184 JSON(对象)----->JSON字符串//JSON--->data--->JSON字符串letdata=try?JSONSerialization.data(withJSONObject:json......
  • js - div 显隐切换
    <divid="divActualProductionLine"></div> if(viewModel.EDNMain.Plant!=null&&viewModel.EDNMain.Plant.indexOf("1201")){ $("#divActualProductionLine").c......
  • Nextjs Contentful GraphQL Vercel Edges
    配置contentful创建免费账号根据提示进行操作,ContentModel-创建页面属性模板(personalWebsite)contententry - 根据属性模板,添加内容,最后发布APIcall-......
  • JS创建对象的三种方法(转)
    转自:JS创建对象的三种方法在JavaScript中,对象是一组无序的相关属性和方法的集合。所有的实物都是对象,例如,字符串、数值、数组、函数等。下面我会介绍三种创建对象的方法......
  • Java Web(八)JSP
    JSP一.入门1.概念JavaServerPages,Java服务端页面一种动态的网页技术,其中既可以定义HTML、JS、CSS等静态内容,还可以定义Java代码的动态内容JSP=HTML+Java2.快速入门导入......
  • jsp常用方法
    jsp的四大作用域page在当前整个页面生效request在一次完正的请求中生效session在一次会话过程生效applicable在整个服务器运行期间生效(服务器运......
  • html乱码 jsp不乱码
    需要在web.xml里将拦截器删除将下面注释掉<!--post乱码过滤器--><!--配置springMVC编码过滤器--><filter><filter-name>CharacterEncodingFilter</filt......
  • Node.JS目录
    Node.JS前置知识(命令行窗口/Node.JS简介/如何使用node执行js文件)Node.JS模块化简介Node.JS模块化详解(Math加乘实现/模块外包围)Node.JSexports和module.exports区别No......
  • JSON.toJSONString(object, SerializerFeature.WriteMapNullValue);第二个参数作用
      这里箭头指向的位置,因为sent-1中的value为空,所以并未打印出来。第二个使用:JSON.toJSONString(map,SerializerFeature.WriteMapNullValue)指定序列化方式就打印出......