javascript - 获取 <style> 标签 css 只对 sibling 和 child 进行操作?

标签 javascript html css

我最近开始更喜欢单个 .js 文件形式的可重用 UI 模块,它使用 div.innerText 操作 dom等等。我正在开发各种 UI 框架 (a new and better one I swear)我计划允许其他开发人员编写他们自己的模块来扩展我的框架。

为确保两个开发人员的工作不会相互干扰,我正在使我的模块独立。然后,因为它们是独立的,我可以快速甚至递归地将它们部署到页面上的任何 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> 以外容器中的元素,它只对容器的 child (即 style 标签的 sibling )及其后代进行操作?促进代码可重用性感觉是个好主意。

顺便问一下,我该如何避免上述问题?我目前的想法是给 div 一个唯一的 ID,然后在我的 <style> 中编辑 css。标记,通过使用正则表达式解析 innerHTML。

最佳答案

CSS 代表级联样式表层叠 表明它被倾倒在从根节点开始的每个元素上:document。规范指出任何 style - 元素始终应用于整个 document

我对将自己的样式应用于元素的问题的解决方案。然而,这个解决方案并不优雅,可以更好地解决,因为无论何时添加元素,它都会使文档充满样式元素。

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);
}

更好的方法是添加一个 link 元素,该元素指向一个包含有关您的代码的样式信息的 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 规则对整个文档都有效。

关于javascript - 获取 &lt;style&gt; 标签 css 只对 sibling 和 child 进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54764046/

相关文章:

python - 使用 Python 3 从 PDF 解析中提取标题和子标题

html - 内容坚持 div,不在底部

javascript - 菜单总是在顶部和水平滚动

javascript - 我如何让按钮出现然后消失

html - 如何将 `overflow` 保存在 flex 容器中?

javascript - Firebase - 从 Web 应用程序表单向数据库写入新数据

javascript - 从javascript中删除双引号

javascript - 使用 jQuery 集合

javascript - 为什么jplayer在iphone上玩?

php - 单击按钮后将值添加到不同的列