如何在没有jQuery的情况下将直接标记附加到HEAD
How to append straight markup to HEAD without jQuery?
我有一个包含样式表HTML的字符串(通过Rails资产管道创建),我需要将其附加到头部并让样式表在所有主要浏览器中实际加载。字符串如下所示:
<link href="https://www.v.me/assets/core-28020ec7a202f8bc47a5d70d5aeb8477.css" media="screen" rel="stylesheet" type="text/css" />
<link href="https://www.v.me/assets/widgets-d4c93376a05ffe6d726371b89bc58731.css" media="screen" rel="stylesheet" type="text/css" />
<link href="https://www.v.me/assets/flowplayer-minimalist-3254ab41f4865c79282728f0012bb98d.css" media="screen" rel="stylesheet" type="text/css" />
<link href="https://www.v.me/assets/main-12765c4980ba6d109852c52830b34586.css" media="screen" rel="stylesheet" type="text/css" />
我需要在不使用jQuery的情况下执行此操作。这可能吗?
我希望我有一个数组中的 URL,但我没有。作为最后的手段,我可以考虑使用正则表达式来解析 URL,但我想避免这种情况。
var pHead = document.getElementsByTagName('head')[0];
pHead.innerHTML = pHead.innerHTML + assetsString;
如果CSSTags
是包含所有链接标签的 HTML 的字符串,则可以使用:
document.getElementsByTagName('head')[0].innerHTML += CSSTags;
function addLink(linkURL,rel,type,media){
var link = document.createElement('link');
link.href = linkURL;
link.rel = rel? rel: 'stylesheet';
link.media = media ? media: 'screen';
link.type = type ? type: 'text/css';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(link, s)
}
addLink('https://www.v.me/assets/core-28020ec7a202f8bc47a5d70d5aeb8477.css')
这里可能有一些不明显的事情,比如在脚本标签之后插入而不是正文或头部。请参阅此处了解更多信息
你可以试试这个:
document.head.innerHTML +=
'<link href="https://www.v.me/assets/core-28020ec7a202f8bc47a5d70d5aeb8477.css" media="screen" rel="stylesheet" type="text/css" />'
+'<link href="https://www.v.me/assets/widgets-d4c93376a05ffe6d726371b89bc58731.css" media="screen" rel="stylesheet" type="text/css" />'
+'<link href="https://www.v.me/assets/flowplayer-minimalist-3254ab41f4865c79282728f0012bb98d.css" media="screen" rel="stylesheet" type="text/css" />'
+'<link href="https://www.v.me/assets/main-12765c4980ba6d109852c52830b34586.css" media="screen" rel="stylesheet" type="text/css" />'
;
对于旧浏览器,首先使用
if(!document.head) document.head = document.getElementsByTagName('head')[0];
编辑:@Sriharsha警告说,上面的代码可以再次下载所有资源。这在 Firefox 27 上不会发生,但如果你想肯定避免这种情况,你可以使用:
var tmpHead = document.implementation.createHTMLDocument().head;
tmpHead.innerHTML = myString;
for (var i=0, tmpLink; tmpLink = tmpHead.childNodes[i]; ++i) {
document.head.appendChild( tmpLink.cloneNode(false) );
}
请注意,document.implementation.createHTMLDocument
仅适用于新浏览器。
相关文章:
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 如何使用jQuery自动打开页面上的所有链接
- 如何使用jquery在填充自动完成的值后使文本框只读
- jQuery:循环一个具有不同超时值的循环
- 用程序搜索JQuery数据表中的文本
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jQuery匹配JSON对象的部分文本
- Jquery POST未填充数组
- Rails资产管道-只向head添加jquery
- 无法解析来自 jquery 中成功的 HTTP HEAD 请求的标头
- JavaScript - head, body or jQuery?
- 使用 jQuery 将 CSS 添加到正文中的 head 标签
- 如何在没有jQuery的情况下将直接标记附加到HEAD
- 如何使用jquery/javascript读取head中动态添加的脚本标记中的值
- 当脚本src添加到head时,不会调用jQuery函数
- 附加& lt; head>使用jQuery -似乎不工作
- 我如何阅读所有的
从& lt; head>使用jQuery - Jquery事件处理代码在将脚本从外部js文件包含在head中之后将无法工作
- jQuery追加不起作用(将css添加到head)
- Jquery没有在head中加载,而是在body标记的底部加载