式;动态样式是在页面加载完成后动态添加到页面中的。
我们以下面这个典型的<link>元素为例:
<link rel="stylesheet" type="text/css" href="styles.css">使用DOM 代码可以很容易地动态创建出这个元素:
var link = document.createElement("link"); link.rel = "stylesheet"; link.type = "text/css"; link.href = "style.css"; var head = document.getElementsByTagName("head")[0]; head.appendChild(link);以上代码在所有主流浏览器中都可以正常运行。需要注意的是,必须将<link>元素添加到<head>
function loadStyles(url){ var link = document.createElement("link"); link.rel = "stylesheet"; link.type = "text/css"; link.href = url; var head = document.getElementsByTagName("head")[0]; head.appendChild(link); }调用loadStyles()函数的代码如下所示:
loadStyles("styles.css");加载外部样式文件的过程是异步的,也就是加载样式与执行JavaScript 代码的过程没有固定的次序。
<style type="text/css"> body { background-color: red; } </style>按照相同的逻辑,下列DOM 代码应该是有效的:
var style = document.createElement("style"); style.type = "text/css"; style.appendChild(document.createTextNode("body{background-color:red}")); var head = document.getElementsByTagName("head")[0]; head.appendChild(style);以上代码可以在Firefox、Safari、Chrome 和Opera 中运行,在IE 中则会报错。IE 将<style>视为
var style = document.createElement("style"); style.type = "text/css"; try{ style.appendChild(document.createTextNode("body{background-color:red}")); } catch (ex){ style.styleSheet.cssText = "body{background-color:red}"; } var head = document.getElementsByTagName("head")[0]; head.appendChild(style);与动态添加嵌入式脚本类似,重写后的代码使用了try-catch 语句来捕获IE 抛出的错误,然后再
function loadStyleString(css){ var style = document.createElement("style"); style.type = "text/css"; try{ style.appendChild(document.createTextNode(css)); } catch (ex){ style.styleSheet.cssText = css; } var head = document.getElementsByTagName("head")[0]; head.appendChild(style); }调用这个函数的示例如下:
loadStyleString("body{background-color:red}");这种方式会实时地向页面中添加样式,因此能够马上看到变化。