/**
* @description IE6~9下,页面的样式规则有如下限制:
* 1)link+style元素的个数不能大于31个;
* 2)单个css文件的rule条数,不能大于4095条;
* 3)<pre>@import</pre> 命令不能嵌套超过4层。
*
* 文件处理了动态加载 link/style元素的情况,但不能处理页面一开始就已经违反了限制1的情况。
* @author shawnwu
* @date 2013-09-03
*/
(function(win){
var doc = document,
head = document.getElementsByTagName("head")[0],
linkEls = doc.getElementsByTagName("link"),
styleEls = doc.getElementsByTagName("style"),
poorIE = /MSIE ([^;]+)/.test(navigator.userAgent) && parseInt(RegExp.$1,10) < 10,
IMPORT_ID = "importLink_ID",
APPEND_ID = "appendStyle_ID",
/**
* IE6~9 的BUG:link+style元素的个数,不能大于31个。
*/
LIMIT = 31,
// 至少保留两个位置给我们定义的style元素:一个用于import,一个用于append
maxNum = LIMIT - 2,
isLimited = false;
/**
* @description 创建添加一个LINK元素
* @param {String} url 样式链接
* @return link元素
*/
function createLinkEl(url){
var link = doc.createElement("link");
link.type = "text/css";
link.rel = "stylesheet";
link.href = url;
head.appendChild(link);
return link;
}
/**
* @description 创建添加一个style元素
* @param {String} str 样式规则
* @param {String} id 元素ID
* @return style元素
*/
function createStyleEl(str,id){
var el = doc.createElement("style");
el.type = "text/css";
if(id){
el.id = id;
}
if(str){
if(poorIE){
el.styleSheet.cssText = str; //IE
}else{
el.appendChild(document.createTextNode(str));
}
}
head.appendChild(el);
return el;
}
function checkLimit(){
if(!isLimited && poorIE){
if(linkEls.length + styleEls.length >= maxNum){
isLimited = true;
}
}
return isLimited;
}
function loadStyle(url){
if(checkLimit()){
doImportStyle(url);
}else{
doLoadStyle(url);
}
}
function loadStyleStr(str){
if(checkLimit()){
doAppendStr(str);
}else{
doLoadStr(str);
}
}
function doLoadStr(str){
createStyleEl(str);
}
function doAppendStr(str){
var el = doc.getElementById(APPEND_ID);
if(!el){
createStyleEl(str,APPEND_ID);
}else{
el.styleSheet.cssText = el.styleSheet.cssText + str;
}
}
function doImportStyle(url){
var el = doc.getElementById(IMPORT_ID),
styleEl = null;
if(!el){
styleEl = createStyleEl(null,IMPORT_ID);
styleEl.styleSheet.addImport(url);
}else{
el.styleSheet.addImport(url);
}
}
function doLoadStyle(url){
createLinkEl(url)
}
//export
win.cssUtil = {
//加载外链css
loadStyle: loadStyle,
//直接添加样式规则
loadStyleStr: loadStyleStr
};
})(window);
分享到:
相关推荐
在探讨JavaScript动态添加style节点的过程中,我们将重点阐述与JavaScript节点操作相关的技术细节。动态添加style节点的方法是Web开发中的常用技术,它允许我们在运行时根据特定的条件或事件向页面中插入样式规则。...
在编程领域,动态添加和删除TEXT框是一种常见的需求,尤其在构建用户界面(UI)时。这通常涉及到前端开发,尤其是HTML、JavaScript和CSS的结合使用。以下将详细阐述如何实现这一功能,并介绍一些关键知识点。 首先...
本文将详细讲解如何使用JavaScript动态添加`<tr>`元素,即表格行,以及如何结合DIV+CSS实现页面布局。 一、JS动态添加`<tr>` 在HTML中,`<table>`元素用于创建表格,而`<tr>`元素代表表格的一行。在JavaScript中,...
`则允许元素在必要时换行,这对于动态添加标签且需要保持容器整洁的场景非常有用。 4. **Grid 布局**: CSS Grid布局是另一种强大的二维布局系统,可以同时控制行和列。通过设置`grid-auto-flow`属性,可以在网格...
在这个例子中,`index.html`可能包含了表格元素(`<table>`),这是动态添加行的载体。表格通常由行(`<tr>`)和单元格(`<td>`)组成。在初始状态下,表格可能已经包含了一些预定义的行。动态添加行就是指当用户触发...
在Vue 3.x和Vite的环境中,动态绑定Style是一种常用的技术,允许我们在运行时根据组件的状态或数据来改变元素的样式。这种功能对于创建高度交互性和可定制化的用户界面非常有用。Vue提供了多种方式来实现style的动态...
**javaScript动态添加Li元素**</title> <style type=text/css> ul li{list-style:none;display:block;text-align:left;} ul li span{display:inline-block;margin-top:5px;margin-right:35px;} </...
在JavaScript中,动态添加HTML元素和属性是网页交互和动态更新页面内容的关键技术。下面将详细解释这个简单实例中的知识点。 首先,我们看到一个名为`test`的函数,这个函数的作用是动态创建一个新的HTML元素。在这...
本主题主要聚焦于如何在StackPanel中实现动画效果,特别是在向ListBox添加数据时,动态展示新行的添加过程。StackPanel是WPF中的一个布局容器,它按照从上到下的顺序排列子元素,而ListBox则常用于显示可选的数据...
我们可以使用JavaScript创建一个style元素,然后将其添加到文档的head部分中。IE8-浏览器将style标签当作特别的节点,不允许访问其子节点,而IE10-浏览器支持使用styleSheet.cssText属性来设置样式。因此,我们需要...
在HTML页面中,JavaScript可以用来动态地改变页面元素,包括添加和删除元素。这为网页提供了丰富的用户体验,使得用户在不刷新整个页面的情况下也能看到实时更新的内容。 首先,我们来看如何通过JavaScript向HTML...
本文档介绍了一种使用jQuery库实现元素动态添加并使其可拖动的技术。在Web开发中,动态地添加元素到页面上并对其进行操作是常见的需求,本实例通过点击按钮添加可拖动的节点,展示了如何利用jQuery处理鼠标事件来...
例如,当你需要在页面中动态添加广告脚本时,可以使用jQuery的push()方法来构建一个包含多个脚本标签的数组,然后再将这些脚本标签一次性添加到页面的指定元素中。这在处理广告和第三方脚本时非常实用,如示例所示:...
本项目“Vue ~ element-ui 动态表单验证”是针对Vue和Element-UI的一个应用场景,主要关注的是动态表单验证以及表单元素的增删操作。下面我们将详细探讨这些知识点。 1. Vue.js动态表单验证: Vue.js允许开发者通过...
如下所示: <table class=exhibit_table xss=removed> 上传计划单 <td xss=removed><input type=file name=file style=display:inline;...button type=button class=btn btn-success btn-xs style=bord
1. **创建`<style>`元素**:你可以通过JavaScript创建一个新的`<style>`元素,并将其插入到`<head>`或任何其他有效位置。例如: ```javascript let style = document.createElement('style'); style.innerHTML = ...
它可以为结果html元素添加样式。安装 npm install markdown-it-style --save-dev或者,如果使用纱线 yarn add -D markdown-it-style用 var Markdown = require('markdown-it')var markdowStyle = require('markdown...
### C# 动态添加控件 在C#开发中,动态添加控件是一种非常实用且灵活的技术。它允许开发者在运行时根据需要创建并显示控件,这为应用程序提供了更多的自定义空间和灵活性。本篇文章将深入探讨如何在C#中实现动态...