《JavaScript Dom 编程艺术》读书笔记-第9章
SS-DOM,本章内容:
style属性
如何检索样式
如何改变样式
三页一体的网页
结构层:由HTML或XHTML之类的标记语言负责创建。标签(tag)也就是尖括号里的单词,对网页内容的语义含义做出了描述。
表示层:由CSS负责完成。CSS描述页面内容应该如何呈现。定义这样一个CSS来声明:文本段应该使用灰色的Arial字体和另外几种sans-serif字体来显示。
<p>{
color:grey;
font-family:"Arial",sans-serif;
}
行为层:如何响应事件。
style属性
文档的元素节点都有一个属性style。style包含着元素的样式。查询这个属性将返回一个对象。样式都存放在style对象的属性里。
element.style.property
例如:
element.style.color
类似font-family这样的属性的获取略有不同,如果输入:
element.style.font-family
则会出错。JavaScript会把连字符“-”理解为减号。DOM要求用驼峰命名法修改属性名字:
element.style.fontFamily
element.style.backgroundColor
element.style.fontWeight
element.style.marginTopWidth
使用CSS速记属性,可以把多个样式组合在一起写成一行。font: 12px 'Arial', sans-serif, CSS font-size
根据某种条件反复设置某种样式
表格:
<table>
<caption>Itinerary</caption>
<thead>
<tr>
<th>When</th>
<th>Where</th>
</tr>
</thead>
<tbody>
<tr>
<td>June 19</th>
<td>Changsha</th>
</tr>
<tr>
<td>June 22</th>
<td>Shanghai</th>
</tr>
</tbody>
</table>
对应样式:
body{
font-family:"helvetica","Arial",sans-serif;
background-color:#fff;
color:#000;
}
table{
margin:auto;
border:1 px 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;
}
th,td{
width:10em;
padding:.5em
}
效果:

希望交替改变每行的背景颜色,形成斑马线的效果。
如果浏览器支持CSS3,则很简单:
tr:nth-child(odd) {backgrund-color: #ffc}
tr:nth-child(even) {backgrund-color: #fff}
nth-child规定属于其父元素的第二个子元素的每个 p 的背景色:
p:nth-child(2)
{
background:#ff0000;
}
如果浏览器不支持CSS3,用JavaScript来处理这种重复的任务是最好的了。
function stripeTables(){
if(!document.getElementsByTagName) return false;
var tables=document.getElementsByTagName("table");
var odd,rows;
for(var i=0;i<tables.length;i++){
odd=true;
rows=tables[i].getElementsByTagName("tr");
for(var j=0;j<rows.length;j++){
if(odd==true){
rows[j].style.backgroundColor="#ffc";
odd=false;
}
else{
odd=true;
}
}
}
}
响应事件
比如:让链接在鼠标指针悬停在其上时改变颜色。此时选CSS最简单
a:hover{
color:#c60
}
在鼠标指针悬停在某个表格行的上方时,该行文本加黑加粗。绝大多数现代浏览器,虽然对CSS伪类的支持很不完整,但对DOM有着良好的支持。JavaScript的做法:
function highLightRows(){
if(!document.getElementsByTagName) return false;
var rows=document.getElementsByTagName("tr");
for (var i=0;i<rows.length ;i++ )
{
rows[i].onmouseover=function(){
this.style.fontWeight="bold";
}
rows[i].onmouseout=function(){
this.style.fontWeight="normal";
}
}
}
在选择JavaScript还是CSS时,需要考虑的因素:
1. 这个问题最简单的解决方案是啥
2. 哪个方案能得到更多浏览器的支持
如果想改变某个元素的呈现效果,使用CSS,如果想改变某个元素的行为,使用DOM。
className的属性
与其使用DOM直接改变某个元素的样式,不如通过JavaScript代码去更新这个元素的class属性。
function addClass(element,value){//直接修改class会覆盖之前的class效果,最好是增加一个class值
if (!element.className){
element.className=value;
}else{
var newClassname=element.className;
newClassname+=" ";
newClassname=+value;
element.className=newClassname;
}
}
对函数抽象
仔细看看highLightRows函数,就会发现她仅适用于h1元素,className的属性值也是硬编码在函数代码里的。修改这些参数,可以让他成为更通用的参数。
function styleNextSibling(tag,theclass){
if (!document.getElementsByTagName)
{
return false;
}
var pi=document.getElementsByTagName(tag);
for (var i=0; i<pi.length;i++ )
{
var node=pi[i].nextSibling
if (nextElement(node))
{
elem=nextElement(node);
addClass(elem,theclass);
}
}
}
小结:
style属性最大限制是不支持获取外部CSS设置的样式,但仍可以利用style属性去改变各种HTML元素呈现的效果。只要有可能,就应该选择更新className属性,而不是直接更新style对象的有关属性。
《JavaScript Dom 编程艺术》读书笔记-第9章的更多相关文章
- JavaScript DOM编程艺术读书笔记(三)
第七章 动态创建标记 在web浏览器中往文档添加标记,先回顾下过去使用的技术: <body> <script type="text/javascript"> ...
- JavaScript DOM编程艺术读书笔记(二)
第五章 最佳实践 平稳退化(graceful degradation):如果正确使用了JavaScript脚本,可以让访问者在他们的浏览器不支持JavaScript的情况下仍能顺利地浏览你网站.虽然某 ...
- JavaScript DOM编程艺术读书笔记(一)
第一章,第二章 DOM:是一套对文档的内容进行抽象和概念化的方法. W3C中的定义:一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态的访问和修改文档的内容,结构和样式. DHTML( ...
- JavaScript DOM编程艺术 - 读书笔记1-3章
1.JavaScript语法 准备工作 一个普通的文本编辑器,一个Web浏览器. JavaScript代码必须通过Html文档才能执行,第一种方式是将JavaScript代码放到文档<head& ...
- JavaScript DOM编程艺术 读书笔记
2. JavaScript语法 2.1 注释 HTML允许使用"<!--"注释跨越多个行,但JavaScript要求这种注释的每行都必须在开头加上"< ...
- JavaScript DOM编程艺术读书笔记(四)
第十章 实现动画效果 var repeat = "moveElement('"+elementID+"',"+final_x+","+fin ...
- JavaScript DOM编程艺术-学习笔记(第二章)
1.好习惯从末尾加分号:开始 2.js区分大小写 3.程序界万能的命名法则:①不以,数字开头的数字.字母.下划线.美元符号 ②提倡以下划线命名法来命名变量,以驼峰命名法来命名函数.但是到了公司往往会身 ...
- 《javascript dom编程艺术》笔记(一)——优雅降级、向后兼容、多个函数绑定onload函数
刚刚开始自学前端,如果不对请指正:欢迎各位技术大牛指点. 开始学习<javascript dom编程艺术>,整理一下学习到的知识.今天刚刚看到第六章,记下get到的几个知识点. 优雅降级 ...
- JavaScript DOM编程艺术学习笔记(一)
嗯,经过了一周的时间,今天终于将<JavaScript DOM编程艺术(第2版)>这本书看完了,感觉受益匪浅,我和作者及出版社等等都不认识,无意为他们做广告,不过本书确实值得一看,也值得推 ...
- JavaScript DOM编程艺术-学习笔记
发现基础不是很好,补习一下.37买了2本书(dom编程和高级程序设计). 以前读书总是自己勾勾画画,有点没意思.现在写下来,说不定会成为传世经典.哈哈...........随便扯扯淡. 第一天(201 ...
随机推荐
- JavaScript 原型链学习(四)原型链的基本概念、原型链实现继承
简单回顾一下构造函数.原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针.那么,假如我们让原型对象等于另一个类型的实例,结果会 ...
- -bash: 未预期的符号 `(' 附近有语法错误
[1]问题现象 -bash: 未预期的符号 `(' 附近有语法错误 [2]解决方案 给括号前面加反斜杠即可 Good Good Study, Day Day Up. 顺序 选择 循环 总结
- 反向代理&集线器和交换机的区别&广播地址&seq与ack的区别
反向代理服务器: 当一个代理服务器能够代理外部主机访问内部网络时,这种代理服务的方式称为反向代理服务,该服务器被称为反向代理服务器. 集线器与交换机的区别: 集线器和交换机都是起到端口转发的作用,不同 ...
- [完美]原生JS获取浏览器版本判断--支持Edge,IE,Chrome,Firefox,Opera,Safari,以及各种使用Chrome和IE混合内核的浏览器
截至自2017-08-11,支持现世已出的几乎所有PC端浏览器版本判断. 受支持的PC端浏览器列表: Edge IE Chrome Firefox Opera Safari QQ浏览器 360系列浏览 ...
- java学习路线之必会的java基础教程
大数据产业已进入发展的“快车道”,急需大量优秀的大数据人才作为后盾.如果你是Java编程出身,那学习大数据自然是锦上添花:但如果你是刚刚接触大数据技术,还在Java编程基础阶段,这篇文章非常值得你看! ...
- P1605 迷宫
P1605 迷宫 这是一道毒瘤题... 这是一道广搜题 bfs ... 代码: #include<cstdio> #include<iostream> #include< ...
- [linux] grep 文本搜索工具
grep [option] pattern file Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep全称是Global Regular ...
- LOJ #10132. 「一本通 4.4 例 3」异象石
题目地址 LOJ 题解 神仙思路.思路参考自<算法竞赛进阶指南>. 考虑维护dfs序中相邻两个石头的距离,那么每次?的答案就是sum/2(首尾算相邻) 然后维护一下拿个平衡树/set维护一 ...
- GPU并行的基础知识
- Linux上 发布.Net Core
环境准备 下面我们使用VM虚拟机.我这里安装的Linux系统是centos7 软件提供: VM: https://www.vmware.com/cn.html centos7 Minimal :htt ...