`
mutongwu
  • 浏览: 448369 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

动态添加style元素

阅读更多
/**
 * @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节点的过程中,我们将重点阐述与JavaScript节点操作相关的技术细节。动态添加style节点的方法是Web开发中的常用技术,它允许我们在运行时根据特定的条件或事件向页面中插入样式规则。...

    动态添加删除TEXT框

    在编程领域,动态添加和删除TEXT框是一种常见的需求,尤其在构建用户界面(UI)时。这通常涉及到前端开发,尤其是HTML、JavaScript和CSS的结合使用。以下将详细阐述如何实现这一功能,并介绍一些关键知识点。 首先...

    JS动态添加tr

    本文将详细讲解如何使用JavaScript动态添加`&lt;tr&gt;`元素,即表格行,以及如何结合DIV+CSS实现页面布局。 一、JS动态添加`&lt;tr&gt;` 在HTML中,`&lt;table&gt;`元素用于创建表格,而`&lt;tr&gt;`元素代表表格的一行。在JavaScript中,...

    动态添加标签与自动换行

    `则允许元素在必要时换行,这对于动态添加标签且需要保持容器整洁的场景非常有用。 4. **Grid 布局**: CSS Grid布局是另一种强大的二维布局系统,可以同时控制行和列。通过设置`grid-auto-flow`属性,可以在网格...

    Html动态添加行

    在这个例子中,`index.html`可能包含了表格元素(`&lt;table&gt;`),这是动态添加行的载体。表格通常由行(`&lt;tr&gt;`)和单元格(`&lt;td&gt;`)组成。在初始状态下,表格可能已经包含了一些预定义的行。动态添加行就是指当用户触发...

    4.(vue3.x+vite)style动态绑定的方式.rar

    在Vue 3.x和Vite的环境中,动态绑定Style是一种常用的技术,允许我们在运行时根据组件的状态或数据来改变元素的样式。这种功能对于创建高度交互性和可定制化的用户界面非常有用。Vue提供了多种方式来实现style的动态...

    javaScript动态添加Li元素的实例

    **javaScript动态添加Li元素**&lt;/title&gt; &lt;style type=text/css&gt; ul li{list-style:none;display:block;text-align:left;} ul li span{display:inline-block;margin-top:5px;margin-right:35px;} &lt;/...

    用js动态添加html元素,以及属性的简单实例

    在JavaScript中,动态添加HTML元素和属性是网页交互和动态更新页面内容的关键技术。下面将详细解释这个简单实例中的知识点。 首先,我们看到一个名为`test`的函数,这个函数的作用是动态创建一个新的HTML元素。在这...

    wpf StackPanel animation 添加数据 添加行 动画

    本主题主要聚焦于如何在StackPanel中实现动画效果,特别是在向ListBox添加数据时,动态展示新行的添加过程。StackPanel是WPF中的一个布局容器,它按照从上到下的顺序排列子元素,而ListBox则常用于显示可选的数据...

    给before和after伪元素设置js效果的方法.docx

    我们可以使用JavaScript创建一个style元素,然后将其添加到文档的head部分中。IE8-浏览器将style标签当作特别的节点,不允许访问其子节点,而IE10-浏览器支持使用styleSheet.cssText属性来设置样式。因此,我们需要...

    JavaScript动态改变HTML页面元素例如添加或删除

    在HTML页面中,JavaScript可以用来动态地改变页面元素,包括添加和删除元素。这为网页提供了丰富的用户体验,使得用户在不刷新整个页面的情况下也能看到实时更新的内容。 首先,我们来看如何通过JavaScript向HTML...

    jQuery动态添加可拖动元素完整实例(附demo源码下载)

    本文档介绍了一种使用jQuery库实现元素动态添加并使其可拖动的技术。在Web开发中,动态地添加元素到页面上并对其进行操作是常见的需求,本实例通过点击按钮添加可拖动的节点,展示了如何利用jQuery处理鼠标事件来...

    jquery中push()的用法(数组添加元素)

    例如,当你需要在页面中动态添加广告脚本时,可以使用jQuery的push()方法来构建一个包含多个脚本标签的数组,然后再将这些脚本标签一次性添加到页面的指定元素中。这在处理广告和第三方脚本时非常实用,如示例所示:...

    Vue ~ element-ui 动态表单验证,支持添加和删除操作

    本项目“Vue ~ element-ui 动态表单验证”是针对Vue和Element-UI的一个应用场景,主要关注的是动态表单验证以及表单元素的增删操作。下面我们将详细探讨这些知识点。 1. Vue.js动态表单验证: Vue.js允许开发者通过...

    jquery动态添加带有样式的HTML标签元素方法

    如下所示: &lt;table class=exhibit_table xss=removed&gt; 上传计划单 &lt;td xss=removed&gt;&lt;input type=file name=file style=display:inline;...button type=button class=btn btn-success btn-xs style=bord

    通过JS动态向网页中添加CSS样式语句代码

    1. **创建`&lt;style&gt;`元素**:你可以通过JavaScript创建一个新的`&lt;style&gt;`元素,并将其插入到`&lt;head&gt;`或任何其他有效位置。例如: ```javascript let style = document.createElement('style'); style.innerHTML = ...

    markdown-it-style:markdown-it插件-为您的markdwon添加样式

    它可以为结果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#开发中,动态添加控件是一种非常实用且灵活的技术。它允许开发者在运行时根据需要创建并显示控件,这为应用程序提供了更多的自定义空间和灵活性。本篇文章将深入探讨如何在C#中实现动态...

Global site tag (gtag.js) - Google Analytics