使用JavaScript和CSS实现文本隔行换色的方法


Posted in Javascript onNovember 04, 2015

先来看一个简单的方法。
在 css 中定义两种样式 .odd{...} 和 .even{...} 分别用于奇数行和偶数行的不同背景颜色。在网页加载后通过 javascript 获取要变色的标签列表,执行如下代码:

// 当文件加载时,执行代码。
window.onload = function() {
 // 获取<ul id="list" />对象
 var list = document.getElementById('list');
 // 获取list下面的所有li
 var items = list.getElementsByTagName('li');
 // 遍历items
 for (var i = 0; i < items.length; i++) {
  var className = (i % 2 == 0) ? ' odd' : ' even';
  items[i].className += className; 
 }
}

实现不同行的不同颜色,这样变完全在前端处理,不会与后端的逻辑混淆,是一种比较好的解决方案。
那么这种代码实现起来效果基本上是这样的:

使用JavaScript和CSS实现文本隔行换色的方法

不过,这种方法存在一些问题:

  • 只能对指定的一个列表进行渲染,不能重用
  • 不能指定变色的起始位置,在处理表格的变色时,得专门写处理
  • 代码全在 onload 事件中,对页面的依赖太高

将其代码进行改进并移入到一个单独的函数中去:

/**
 * 此方法用于列表的隔行变色效果,可以灵活得为指定ID的列表指定隔行的颜色。
 *
 * @param id 列表的id
 * @param item 要变色的行的标签
 * @param odd 奇数行的样式类名,如果不指定,则默认为odd
 * @param even 偶数行的样式类名,如果不指定,则默认为even
 * @param start 开始变色的行的索引,如果不指定,则默认为0
 * @param end 结束变色的行的索引,如果不指定,则默认为列表长度
 */
function rowRender(id, item, odd, even, start, end) {
 // 获取列表容器
 var list = document.getElementById(id);
 // 获取列表
 var items = list.getElementsByTagName(item);
 
 // 修正初始位置,如果不是一个数字或者越界,则从0开始
 if (isNaN(start) || (start < 0 || start >= items.length)) {
  start = 0;
 }
 
 // 修正结束位置,如果不是一个数字或者越界,则为列表末尾
 if (isNaN(end) || (end < start || end >= items.length)) {
  end = items.length;
 }
 
 // 如果没有指定odd,则默认为'odd'
 odd = odd || 'odd';
 // 如果没有指定even, 则默认为'even'
 even = even || 'even'; 
 
 // 遍历列表并渲染效果
 for (var i = start; i < end; i++) {
  var className = ' ' + ((i % 2 == 0) ? odd : even);
  items[i].className += className;
 }
}

用法:

window.onload = function() {
 // 渲梁list1下所有的li标签,使用默认的样式和起始位置
 rowRender('list1', 'li');

 // 渲梁list2下所有的li标签,使用指定的odd和默认的even,使用指定的起始位置
 rowRender('list2', 'li', 'odd1', null, 2, 6);

 // 渲梁table1下所有的tr标签,使用指定的odd和even,使用默认的起始位置
 rowRender('table1', 'tr', 'tr-odd', 'tr-even');
 // 渲梁table2下所有的tr标签,使用指定的odd和even,使用指定的起始位置
 rowRender('table2', 'tr', 'tr-odd', 'tr-even', 1);
}

示例:
Table 1

rowRender('table1', 'tr', 'tr-odd', 'tr-even');

使用JavaScript和CSS实现文本隔行换色的方法

Table 2

rowRender('table1', 'tr', 'tr-odd', 'tr-even', 1);

使用JavaScript和CSS实现文本隔行换色的方法

Javascript 相关文章推荐
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
Oct 17 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
Jul 01 Javascript
js中cookie的添加、取值、删除示例代码
Oct 21 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
Nov 21 Javascript
一个js导致的jquery失效问题的解决方法
Nov 27 Javascript
js实现倒计时时钟的示例代码
Dec 17 Javascript
js打开新窗口方法整理
Feb 17 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
Jun 29 Javascript
node.js中的querystring.stringify方法使用说明
Dec 10 Javascript
JavaScript实现信用卡校验方法
Apr 07 Javascript
Javascript基础回顾之(二) js作用域
Jan 31 Javascript
微信小程序实现一张或多张图片上传(云开发)
Sep 25 Javascript
javascript常用函数(1)
Nov 04 #Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
Nov 04 #Javascript
jQuery多条件筛选如何实现
Nov 04 #Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
Nov 04 #Javascript
js数组去重的5种算法实现
Nov 04 #Javascript
解决js图片加载时出现404的问题
Nov 30 #Javascript
jquery实现的点击翻书效果代码
Nov 04 #Javascript
You might like
简单的移动设备检测PHP脚本代码
2011/02/19 PHP
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
python解析xml模块封装代码
2014/02/07 Python
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
Python中获取网页状态码的两个方法
2014/11/03 Python
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
2015/05/05 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
2020/06/29 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
NET程序员上机面试题
2015/05/23 面试题
大学生社会实践自我鉴定
2014/03/24 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
推普周活动总结
2014/08/28 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
2014年村委会工作总结
2014/11/24 职场文书
个人维稳承诺书
2015/05/04 职场文书
农村老人去世追悼词
2015/06/23 职场文书
环保建议书作文400字
2015/09/14 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
python编写五子棋游戏
2021/05/25 Python
python 如何做一个识别率百分百的OCR
2021/05/29 Python