当CSS使用伪类开始侵入DOM和JavaSCript所控制着的行为层时,DOM和JavaScript也使用他们的一系列样式去控制表现层,这篇随笔主要说的就是利用JavaScript去控制元素的表现形式,

一、Style属性

文档中的每一个元素都是一个对象,每个对象又有着各式各样的属性。有一些元素告诉我们元素在节点树上的位置信息。比如说,parentNode、nextSibling、previousSibling、childNodes、

firstChild、lastChild这些属性,就告诉了我们文档中各节点的之间的关系信息。又有一些属性比如nodeType、nodeName、nodeValue(这个属性注意只能获取文本元素节点的节点值)这些属性,告诉我们元素本身的信息。

除此之外,文档的每个元素都还有一个属性style。style属性包含着元素的样式,查询这个属性返回的是一个对象而不是一个简单的字符串。样式都存放在这个style对象的属性里。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="js/utility.js" type="text/javascript"></script>
<script src="js/jquery-1.9.1.min.js" type="text/javascript"></script>
<style type="text/css">
p
{
color:blue;
}
</style> </head>
<body>
<p>asdas</p>
<script type="text/javascript">
window.onload = function () {
var para = document.getElementsByTagName("p")[0];
alert(typeof para.style);
}
</script>
</body>
</html>

输出:object;  说明style属性确实是一个对象;

这样我们就可以使用DOM的style属性去获取对应元素对象的style属性了,但是这里必须注意,必须谨记的一个地方,DOM 的style属性只能获取html标签内内嵌的style属性像下面代码这样:

<p style="color:Blue; font-size:16px;">asdas</

使用Style属性的注意点一:

如果标签的样式被定义在了外部文件里面,DOM将获取不到外部文件里面的style属性值。牢记这点很重要;

也许有人会认为那么这个DOM的style属性将没有任何的实用价值,应为我们在开发中一般会将表现和样式分离,几乎都会将样式表放入到外部css文件里面,这个时候就看你怎么使用DOM的style属性了,因为虽然我们无法获取外部文件里面的style属性,但是我们可以获取我们给DOM设置的样式,也就是说DOM的style属性不仅可以获取元素的style属性,还能给元素设置style属性,而我们给元素设置的style属性我们可以用DOM的style属性来获取。

使用Style属性的注意点二:

当我们使用Style属性去获取像font-weight和font-family这类的属性时,不能这些获取

目标元素.style.font-weight 

应为你如果这样获取,JavaScript解释器会把font-weight中间的‘-’当作减号来看那上面这句代码的意思就变成(目标元素.style.font)减去weight变量的值,这将完全违背我们的本意.

所以这边DOM有相关的处理方法,当你需要引用一个中间带减号的css属性时,DOM要求你用驼峰命名法。css属性font-family编程fontFamily,其他类似的属性也用相同的方法操作。

二、Style属性实战

介绍完style属性之后,下面开始上代码了,代码如下

html:

html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<style type="text/css">
body
{
font-family: "Helvetaica" , "Arial" ,sans-serif;
background-color: #fff;
color: #000;
}
table
{
margin: 0;
border: 1px solid #699;
}
caption
{
margin:auto;
padding:.2em;
font-size:1.2em;
font-weight:bold;
}
th
{
font-weight:normal;
font-style:italic;
text-align:left;
border:1px dotted #699;
background-color:#9cc;
color:#000;
}
tr
{
cursor:pointer; 、
}
th,td
{
width:10em;
padding:.5em;
}
</style>
</head>
<body>
<div>---------</div>
<table>
<caption>
Itinerary(旅程,路线)</caption>
<thead>
<tr>
<th>
When
</th>
<th>
Where
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
June 9th
</td>
<td>
Portland,<abbr title="Oregon">OR</abbr>
</td>
</tr>
<tr>
<td>
June 10th
</td>
<td>
Seattle,<abbr title="Washington">WA</abbr>
</td>
</tr>
<tr>
<td>
June 12th
</td>
<td>
Sacramento,<abbr title="California">CA</abbr>
</td>
</tr>
</tbody>
</table>
<div>---------</div>
<div>---------</div>
<script src="../js/utility.js" type="text/javascript"></script>
<script src="../js/index.js" type="text/javascript"></script>
<script type="text/javascript">
var insertposition = document.getElementsByTagName("div")[1];//指定缩略语列表的插入位置
displayAbbreviations(insertposition);
var loadeventlist = [stripeTable,displayAbbreviations];//将两个js方法放入window.onload队列里面
addOnloadEventlist(loadeventlist);
</script>
</body>
</html>

js代码:

//设置表格各种特性
function stripeTable() {
if (!checkCompatibility) return;
var tables = document.getElementsByTagName("table");
for (var i = 0; i < tables.length; i++) {
var rows = tables[i].getElementsByTagName("tr");
alert(rows[0].innerHtml);
var flag = false;
for (var j = 0; j < rows.length; j++) {
//表格隔行变色效果逻辑
if (flag == true) {
rows[j].style.backgroundColor = "#ffc";
flag = false;
}
else {
flag = true;
}
//鼠标放上去当前行文本加黑加粗
rows[j].onmouseover = function () {
this.style.fontWeight = "bold";
}
rows[j].onmouseout = function () {
this.style.fontWeight = "normal";
}
}
}
} /*
检查浏览器的兼容性,是否支持查用的DOM方法
check the compatibility of the broswer
*/
function checkCompatibility() {
if (!document.getElementById) return false;
if (!document.createElement) return false;
if (!document.createTextNode) return false;
if (!document.getElementsByTagName) return false;
if (!document.getElementsByName) return false;
return true;
}
/*
addOnloadEvent的扩展版因为每次添加一个函数都需要调用addOnloadEvent()函数,所以为了节省代码,将需要绑定的函数名写入到一个数组里面,
然后将数组引用,传递给addOnloadEventlist();每次添加,只需将函数名,写到数组里面即可
@param eventlist -需要与window.onload事件绑定的函数名数组
*/
function addOnloadEventlist(eventlist) {
if (!eventlist) return false;
var oldonload = window.onload;
window.onload = function () {
for (var i = 0; i < eventlist.length; i++) {
eventlist[i]();
}
}
}

说下效果:简单实现table表格的隔行变色,和当鼠标在数据行上悬浮时,数据加黑加粗显示;

实现这个效果的关键是如下代码:

 rows[j].style.backgroundColor = "#ffc";  //当前行的背景色变成#ffc
this.style.fontWeight = "bold"; //当前行的字体颜色加粗
this.style.fontWeight = "normal"; //当前行的字体从加粗变为正常

这三段代码分别利用style属性设置了当我们的动作发生时,table表格相应的会做那些变化;

但是我们仔细思考下,如果这里有一天我们的需求变了,这个表格隔行变色的背景色了,我们要换个颜色,这时候我们又要来修改js代码,而且这不是关键,关键是如果我们还需要加其他的显示效果,这个时候为了加这个效果,我们必须在加一行代码,所以这种方式添加效果的方式并不是很好。所以这个时候如果把Css和JavaScript结合往往能产生很好的效果,关于这个你可以去我的下一个随笔关于className属性的介绍http://www.cnblogs.com/GreenLeaves/p/5757216.html

这篇随笔就是教我们如何通过DOM的className属性来减少我们对控制元素样式的代码量。

JavaScript之Style属性学习的更多相关文章

  1. JavaScript之ClassName属性学习

    在前面的style属性学习中,知道了通过style属性可以控制元素的样式,从而实现了行为层通过DOM的style属性去干预变现层显示的目地,但是这种就是不好的,而且为了实现通过DOM脚本设置的样式,你 ...

  2. CSS和JavaScript标签style属性对照表

    CSS和JavaScript标签style属性对照表一般情况是把"-"去掉,后面字母用大写. CSS语法 (不区分大小写) JavaScript语法 (区分大小写) border ...

  3. JavaScript CSS Style属性对照表

    JavaScript CSS Style属性对照表 盒子标签和属性对照 CSS语法 (不区分大小写) JavaScript语法 (区分大小写) border border border-bottom ...

  4. javascript原生style属性分析

    1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="U ...

  5. JS中style属性

    解决办法:1.先定义一个CSS规则,然后this.className=''2.document.getElementByIdx_x("a").style.cssText=" ...

  6. style属性css与javascript对照表

    有时候会用javascript来控制标签的style,但js的style属性写法跟css有点不一样,通常是一个单词的写法不变,单词-单词属性会去掉“-”,再把第二个单词的首字母大写,估计是为了与减法运 ...

  7. JavaScript入门--慕课网学习笔记

     JAVASCRIPT—(慕课网)入门篇 我们来看看如何写入JS代码?你只需一步操作,使用<script>标签在HTML网页中插入JavaScript代码.注意, <script&g ...

  8. 《零基础学JavaScript(全彩版)》学习笔记

    <零基础学JavaScript(全彩版)>学习笔记 二〇一九年二月九日星期六0时9分 前期: 刚刚学完<零基础学HTML5+CSS3(全彩版)>,准备开始学习JavaScrip ...

  9. css字体样式(Font Style),属性

    css字体样式(Font Style),属性   css字体样式(Font Style)是网页中不可或缺的样式属性之一,有了字体样式,我们的网页才能变得更加美观,因此字体样式属性也就成为了每一位设计者 ...

随机推荐

  1. 宣布正式发布 Windows Azure 移动服务、网站及持续的服务创新

    我们努力创新,向开发人员提供多样化平台以构建最好的云应用程序并在第一时间提供给世界各地的客户.许多新应用程序都属于"现代化应用程序",即始终基于 Web,且可以通过各种移动设备进行 ...

  2. poj1477---搭积木

    #include<stdio.h> #include<stdlib.h> int main() { int n,i; int bricks[55],set=0; while(s ...

  3. wx.Frame

    wx.Frame A frame is a window whose size and position can (usually) be changed by the user. It usuall ...

  4. Unity CCTween UGUI 动画插件

    在这简单的介绍一下 CCTween 动画插件的使用 因为GIF 制作软件不太好(网上随便下载的)所以导致效果不太好,有时间我重新制作一下 这是一下简单的效果 下面介绍怎么使用 首先 先下载 CCTwe ...

  5. Android SoundPool 的使用以及原理分析

    好吧,我们今天来聊聊SoundPool这东西. 据说这个东西是冰激凌(Android4.0)里才引入的一个新东西.按照官方的意思大多数情况下是给游戏开发用的,比如一个游戏10关,它能在游戏开始前一次加 ...

  6. PHP+jQuery实现翻板抽奖

    翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息.看似简单的一个操作过程,却包含着WEB技术的很多知识面 ...

  7. bootstrapvalidator之API学习

    最近项目用到了bootstrap框架,其中前端用的校验,采用的是bootstrapvalidator插件,也是非常强大的一款插件.我这里用的是0.5.2版本.下面记录一下使用中学习到的相关API,不定 ...

  8. ZOJ3784 String of Infinity 高大上的AC自动机 数据原来这么水啊!不算输入输出只有5-7行

    找给定s集合里面word全部是同一个字符的,这样的word有几个,如果数量<m就yes,否则就no.#include<iostream> #include<cstring> ...

  9. hibernate 简单查询

    1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段           String hql = "from Users";   ...

  10. 安装jdk和tomcat

    安装jdk和tomcat 1,准备工作 虚拟机 VMware :liunx系统镜像 bebian :连接操作软件 putty: 开源图像FTP客户端winspc: Java 语言的软件开发工具包 JD ...