使用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 相关文章推荐
ExtJS Store的数据访问与更新问题
Apr 28 Javascript
node.js中的fs.unlinkSync方法使用说明
Dec 15 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
Feb 28 Javascript
JQuery实现超链接鼠标提示效果的方法
Jun 10 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
Mar 16 Javascript
AngularJS包括详解及示例代码
Aug 17 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
Sep 16 Javascript
遍历json获得数据的几种方法小结
Jan 21 Javascript
微信小程序利用co处理异步流程的方法教程
May 20 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
Jun 01 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
Jun 05 Javascript
使用React-Router实现前端路由鉴权的示例代码
Jul 26 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一些有意思的小区别
2006/12/06 PHP
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
php实现的xml操作类
2016/01/15 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
JavaScript 常用函数库详解
2009/10/21 Javascript
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
悬浮广告方法日常收集整理
2016/03/18 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
AngularJS指令与控制器之间的交互功能示例
2016/12/14 Javascript
web打印小结
2017/01/11 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
vue仿ios列表左划删除
2019/09/26 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
Python批量发送post请求的实现代码
2018/05/05 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
个人找工作求职简历的自我评价
2013/10/20 职场文书
工业设计专业推荐信
2013/10/29 职场文书
自动化专业个人求职信范文
2013/12/30 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
商场促销活动总结
2014/07/10 职场文书
乡镇群众路线专项整治方案
2014/11/03 职场文书
Ajax请求超时与网络异常处理图文详解
2021/05/23 Javascript