我正在尝试将动态生成的样式表文件添加到我的标头标记中。
我遇到的问题是我需要在任何其他CSS文件之前添加此文件。
我尝试使用insertBefore()
,但这似乎删除了我用作要附加元素的标识符的元素,而不是仅仅添加新元素。
以下是代码:
CssFile = document.getElementById('my-css')
Link = document.createElement('link')
Link.href = "example.css"
Link.type = 'text/css'
Link.rel = 'stylesheet'
Link.insertBefore(CssFile, Link.childNodes[0])
我的index.html是这样的:
<head>
<meta charset="utf-8">
<title></title>
<link href="css/my.css" rel="stylesheet" id="my-css">
<link href="css/vendor.css" rel="stylesheet">
</head>
以及执行该函数后我的期望是这个结果:
<head>
<meta charset="utf-8">
<title></title>
<link href="example.css" rel="stylesheet">
<link href="css/my.css" rel="stylesheet" id="my-css">
<link href="css/vendor.css" rel="stylesheet">
</head>
但相反,这就是我得到的:
<head>
<meta charset="utf-8">
<title></title>
<link href="example.css" rel="stylesheet">
// Missing file here!
<link href="css/vendor.css" rel="stylesheet">
</head>
我查看了文档,但显然我并不真正理解如何使用它。
答案 0 :(得分:1)
问题:您使用insertBefore
的方式是错误的。解释问题。
来自 insertBefore的文档这是您需要使用的语法
parentNode.insertBefore(newNode,referenceNode);
您需要父节点,然后通过传递insertBefore
和newNode
在其上使用referenceNode
。
你拥有的是Link.insertBefore(CssFile, Link.childNodes[0])
。
在这里,您尝试将CssFile
插入Link
作为父级,Link.childNodes[0]
作为参考。
因此,当您执行上述操作时,CssFile
元素会在Link
之前插入,因此会从原始位置移除。
<强>解决方案:强>
因此,在您的HTML head
中是父节点。您可以通过CssFile.parentNode
新节点为Link
参考节点为CssFile
因此请将您的Link.insertBefore(CssFile, Link.childNodes[0])
替换为
CssFile.parentNode.insertBefore(Link , CssFile);
答案 1 :(得分:1)
Node.insertBefore()方法将引用节点之前的指定节点作为当前节点的子节点插入。
这里的参考节点是
document.getElementById('my-css')
需要添加新节点的节点是
document.querySelector("head");
您需要在代码中进行以下更改。
Link = document.createElement('link')
Link.href = "example.css"
Link.type = 'text/css'
Link.rel = 'stylesheet'
document.querySelector("head").insertBefore(Link, document.getElementById('my-css'));
Plunker:https://plnkr.co/edit/MY6F4JdYPvqdYNIU7DUF?p=preview
答案 2 :(得分:0)
id不是链接DOM的有效属性。我建议选择.querySelector('[href="css/vendor.cs"]')
答案 3 :(得分:0)
insertBefore必须与父节点一起使用
var CssFile = document.querySelector('[href="css/vendor.css"]'); // Peter Chon is right
var Link = document.createElement('link');
Link.href = "example.css";
Link.type = 'text/css';
Link.rel = 'stylesheet';
var parent = CssFile.parentNode;
parent.insertBefore(Link, CssFile);
答案 4 :(得分:0)
试试这个
HTML
WHERE
T1.update_date >= @d
OR T2.update_date >= @d
OR T3.update_date >= @d
OR T4.update_date >= @d
OR T5.update_date >= @d
OR T6.update_date >= @d
OR T7.update_date >= @d
OR T8.update_date >= @d
OR T9.update_date >= @d
OR T10.update_date >= @d
OR T11.update_date >= @d
JS
<head id="my-css">
<meta charset="utf-8">
<title></title>
<link href="css/my.css" rel="stylesheet" >
<link href="css/vendor.css" rel="stylesheet">
</head>
答案 5 :(得分:0)
查看Node.insertBefore()
var insertedNode = parentNode.insertBefore(newNode,referenceNode);
我认为你的问题是你的newNode和ReferenceNode是错误的。您还需要引用parent
节点。
CssFile = document.getElementById('my-css')
Link = document.createElement('link')
Link.href = "example.css"
Link.type = 'text/css'
Link.rel = 'stylesheet'
CssFile.parentNode.insertBefore(Link, CssFile)