使用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 相关文章推荐
使Ext的Template可以解析二层的json数据的方法
Dec 22 Javascript
window.onbeforeunload方法在IE下无法正常工作的解决办法
Jan 23 Javascript
JavaScript中的16进制字符(改进)
Nov 21 Javascript
来自国外的30个基于jquery的Web下拉菜单
Jun 22 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
Mar 27 Javascript
jQuery老黄历完整实现方法
Jan 16 Javascript
setTimeout学习小结
Feb 08 Javascript
JavaScript实现单例模式实例分享
Dec 22 Javascript
Vue2.0子同级组件之间数据交互方法
Feb 28 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
May 08 Javascript
vue实现动态显示与隐藏底部导航的方法分析
Feb 11 Javascript
vue.js 解决v-model让select默认选中不生效的问题
Jul 28 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文件怎么打开 如何执行php文件
2011/12/21 PHP
PHP中strtotime函数使用方法分享
2012/01/10 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
表单元素事件 (Form Element Events)
2009/07/17 Javascript
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
2011/04/06 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
javascript单张多张图无缝滚动实例代码
2020/05/10 Javascript
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
python引用DLL文件的方法
2015/05/11 Python
关于Python数据结构中字典的心得
2017/12/04 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
python 检查是否为中文字符串的方法
2018/12/28 Python
对Python中画图时候的线类型详解
2019/07/07 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
Python中有几个关键字
2020/06/04 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
手术室护士自我鉴定
2013/10/14 职场文书
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
最新的咖啡店创业计划书
2013/12/30 职场文书
社区十八大感言
2014/01/19 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS