javascript动态添加样式(行内式/嵌入式/外链式等规则)


Posted in Javascript onJune 24, 2013

添加CSS的方式有行内式、嵌入式、外链式、导入式
a)动态引入样式表文件:

function loadLink(url){ 
var link = document.createElement("link"); 
link.type = "text/css"; 
link.rel = "stylesheet"; 
link.href = url; 
var head = document.getElmentsByTagName("head")[0]; 
head.appendChild(link); 
}

b)嵌入式:
function insertStyles(){ 
var doc,cssCode=[],cssText; 
var len = arguments.length; 
var head,style,firstStyle; 
if(len == 1){ 
doc = document; 
cssCode.push(arguments[0]) 
}else if(len == 2){ 
doc = arguments[0]; 
cssCode.push(arguments[1]); 
}else{ 
alert("函数最多接收两个参数!"); 
} 
head = doc.getElementsByTagName("head")[0]; 
styles= head.getElementsByTagName("style"); 
if(styles.length == 0){ 
if(doc.createStyleSheet){//ie 
doc.createStyleSheet(); 
}else{//FF 
var tempStyle = doc.createElement("style"); 
tempStyle.setAttibute("type","text/css"); 
head.appendChild(tempStyle); 
} 
} 
firstStyle = styles[0]; 
cssText=cssCode.join("\n"); 
if(!+"\v1"){//opacity兼容 
var str = cssText.match(/opacity:(\d?\.\d+);/); 
if(str!=null){ 
cssText = cssText.replace(str[0],"filter:alpha(opacity="+pareFloat(str[1])*100+")"); 
} 
} 
if(firstStyle.styleSheet){ 
firstStyle.styleSheee.cssText += cssText; 
}else if(doc.getBoxObjectFor){ 
firstStyle.innerHTML += cssText; 
}else{ 
firstStyle.appendChild(doc.createTextNode(cssText)); 
} 
}

c)行内式:
var addStyle=function (ele,str){ 
var s = ele.getAttribute("style"),styles; 
if(str && typeof str === "string"){ 
if(!s){ 
ele.style.cssText = str; 
}else{ 
if(s == '[object]'){//IE6/7 e.getAttribute("style")返回[object] 
s=ele.style.cssText; 
} 
styles= trim(s).split(";"); 
for (var i=0,len=styles.length; i<len; i++){ 
var style_i=trim(styles[i]); 
var attr=style_i.split(":")[0]; 
if(str.indexOf(attr)>-1){ 
styles[i]=""; 
}else{ 
styles[i]=style_i; 
} 
} 
ele.style.cssText= styles.join("")+";"+str; 
} 
} 
}

d)导入式:
import "index.css";
操作CSS 类相关的方法:
var hasClass=function(ele,value){ 
var rclass = /[\n\t\r]/g, 
value=" "+value+" "; 
return (ele.nodeType==1)&&(" "+ele.className+" ").replace(rclass," ").indexOf(value)>-1; 
} 
var trim=function (val){ 
return val.replace(/(^\s+)|(\s+$)/g,""); 
} 
var addClass=function(ele,value){ 
var rspace = /\s+/,classNames,getClass; 
if(value&&typeof value === "string"){ 
classNames = value.split(rspace); 
if(ele.nodeType === 1){ 
if(!ele.className && classNames.length == 1){ 
ele.className = value; 
}else{ 
getClass = " "+ele.className+" "; 
for(var i=0,len=classNames.length; i<len ;i++){ 
var cname=classNames[i]; 
if(!hasClass(ele,cname)){ 
getClass += cname+" "; 
} 
} 
ele.className = trim(getClass); 
} 
} 
} 
} 
var removeClass=function(ele,value){ 
var rclass = /[\n\t\r]/g,classNames,getClass; 
if((value&&typeof value === "string")||value === undefined){ 
classNames = (value||"").split(rspace); 
if(ele.nodeType === 1 && ele.className){ 
if(value){//存在查找要移除的类 
getClass = " "+ele.className+" ".replace(rclass," ");//左右空格,为了使类中各类间均等,方便后面替换 
for(var i=0,len=classNames.length; i<len; i++){ 
getClass = getClass.replace(" "+classNames[i]+" "," ") 
} 
ele.className=trim(getClass); 
}else{//不存在移除所有类 
ele.className = ""; 
} 
} 
} 
} 
var toggleClass=function(ele,value){ 
if(typeof value === "string"){ 
if(hasClass(ele,value)){ 
removeClass(ele,value); 
}else{ 
addClass(ele,value); 
} 
} 
}
Javascript 相关文章推荐
js 数组实现一个类似ruby的迭代器
Oct 27 Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
May 24 Javascript
extjs3 combobox取value和text案例详解
Feb 06 Javascript
javascript实现行拖动的方法
May 27 Javascript
jquery小火箭返回顶部代码分享
Aug 19 Javascript
跟我学习javascript的循环
Nov 18 Javascript
一些实用性较高的js方法
Apr 19 Javascript
js style.display=block显示布局错乱问题的解决方法
Sep 21 Javascript
需要牢记的JavaScript基础知识
Sep 25 Javascript
基于JavaScript实现轮播图原理及示例
Apr 10 Javascript
详解微信小程序中var、let、const用法与区别
Jan 11 Javascript
VUE : vue-cli中去掉路由中的井号#操作
Sep 04 Javascript
JS实现的省份级联实例代码
Jun 24 #Javascript
javascript中的绑定与解绑函数应用示例
Jun 24 #Javascript
用jquery生成二级菜单的实例代码
Jun 24 #Javascript
自动刷新网页,自动刷新当前页面,JS调用
Jun 24 #Javascript
jquery中的事件处理详细介绍
Jun 24 #Javascript
模拟电子签章盖章效果的jQuery插件源码
Jun 24 #Javascript
Js注册协议倒计时的小例子
Jun 24 #Javascript
You might like
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
php中使用redis队列操作实例代码
2013/02/07 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
vue.js在标签属性中插入变量参数的方法
2018/03/06 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
2018/09/12 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
Python之os操作方法(详解)
2017/06/15 Python
pytorch 常用线性函数详解
2020/01/15 Python
PyTorch的torch.cat用法
2020/06/28 Python
Python如何将装饰器定义为类
2020/07/30 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
linux面试题参考答案(11)
2016/11/26 面试题
高考自主招生自荐信
2013/10/20 职场文书
送餐员岗位职责范本
2014/02/21 职场文书
投标担保书范文
2014/04/02 职场文书
贷款担保书范文
2014/05/13 职场文书
旅游文化节策划方案
2014/06/06 职场文书
学术会议领导致辞
2015/07/29 职场文书
股东协议书范本2016
2016/03/21 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript