javascript-获取标签css仅可用于兄弟姐妹和孩子?

前端之家收集整理的这篇文章主要介绍了javascript-获取标签css仅可用于兄弟姐妹和孩子? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

最近,我开始偏爱单个.js文件形式的可恢复UI模块,该文件使用div.innerText等操作dom.我正在开发一种类型为(a new and better one I swear)的UI框架,我计划允许其他开发人员编写自己的模块来扩展我的框架.

为了确保两个开发人员的工作不会互相干扰,我正在使我的模块独立.然后,由于它们是独立的,我可以快速甚至递归地将它们部署到页面上的任何div中;例如调用uiElement.deploy(element)通过如下代码将以元素为父元素的可重用uiElement设置为:

uiElement.deploy=function(root){
 uiElement.div=document.createElement("div");
 uiElement.div.innerHTML=`
  <style>
   button{
    background:red;
   }
  </style>
  <button>Hey!</button>`;
 root.appendChild(uiElement.div);
}

一切都很好,但是在样式方面,我对于声明< style> innerHTML中的元素,因为它们可能会对其他可重用模块的样式产生不利影响.

因此,我想知道,为什么HTML标准没有决定是否要放置< style>除了< head>容器中的元素,它仅对容器的子代(即样式标签的兄弟姐妹)及其后代起作用?提升代码可重用性是一个好主意.

顺便说一句,如何避免上面提到的问题?我目前的想法是给div一个唯一的ID,然后在我的< style>标记,方法是使用regex解析innerHTML.

最佳答案
CSS代表级联样式表.级联建议将其倾倒在从根节点:document开始的每个元素上.规范指出,任何style元素始终适用于整个文档.

对于您将自己的样式应用于元素的问题,我的解决方案.但是,此解决方案并不理想,并且可以更好地解决,因为每当添加元素时,都会使样式元素干扰文档.

uiElement.deploy=function(element,className){
 uiElement.div=document.createElement("div");
 uiElement.div.innerHTML=`
  <style>
   button.${className}{
    background:red;
   }
  </style>
  <button class="${className}">Hey!</button>`;
 element.appendChild(uiElement.div);
}

最好是添加一个链接元素,该链接元素指向具有有关代码样式信息的css文件.

uiElement.deploy=function(element,className){
 uiElement.div=document.createElement("div");
 //link element - if not present in document: add.
 if (!document.querySelector(`link[href='location/${element}.css']`))
 {
     const link = document.createElement("link");
     link.href = `location/${element}.css'`;
     document.head.appendChild(link);
 }
 uiElement.div.innerHTML=`
  <button class="${className}">Hey!</button>`;
 element.appendChild(uiElement.div);
}

样式表文件(.css)还提供了更轻松,更灵活的代码管理,如果您只想更改外观,则无需更改js文件.

即使在上述情况下,我也强烈建议为您创建的元素设置唯一的ID或类名,以使您的CSS规则有所不同,因为CSS规则对整个文档均有效.

猜你在找的HTML相关文章