使用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 相关文章推荐
JavaScript XML操作 封装类
Jul 01 Javascript
EasyUI中的tree用法介绍
Nov 01 Javascript
让js弹出窗口居前显示的实现方法
Jul 10 Javascript
jQuery中.live()方法的用法深入解析
Dec 30 Javascript
100个不能错过的实用JS自定义函数
Mar 05 Javascript
JavaScript为事件句柄绑定监听函数实例详解
Dec 15 Javascript
JS实现获取剪贴板内容的方法
Jun 21 Javascript
js实现打地鼠小游戏
Feb 13 Javascript
详解webpack打包第三方类库的正确姿势
Oct 20 Javascript
JS使用正则表达式判断输入框失去焦点事件
Oct 16 Javascript
Vue中函数防抖节流的理解及应用实现
Apr 24 Javascript
vue 使用lodash实现对象数组深拷贝操作
Sep 10 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实现的MySQL数据浏览器
2007/03/11 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
php的dl函数用法实例
2014/11/06 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
iOS+PHP注册登录系统 PHP部分(上)
2016/12/26 PHP
php格式文件打开的四种方法
2018/02/24 PHP
JS 密码强度验证(兼容IE,火狐,谷歌)
2010/03/15 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
JS调试必备的5个debug技巧
2014/03/07 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
javascript定时器完整实例
2015/02/10 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
python多线程同步实例教程
2019/08/11 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
python推导式的使用方法实例
2021/02/28 Python
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
协议书范文
2015/01/27 职场文书
Python 多线程之threading 模块的使用
2021/04/14 Python
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle