使用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 相关文章推荐
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
Jan 09 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
Jan 13 Javascript
浅谈JavaScript Date日期和时间对象
Dec 29 Javascript
JavaScript检测上传文件大小的方法
Jul 22 Javascript
jQuery遍历json的方法(推荐)
Jun 12 Javascript
js 博客内容进度插件详解
Feb 19 Javascript
vue实现条件判断动态绑定样式的方法
Sep 29 Javascript
微信小程序自定义键盘 内部虚拟支付
Dec 20 Javascript
微信小程序实现点击卡片 翻转效果
Sep 04 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
Sep 21 Javascript
vue跳转方式(打开新页面)及传参操作示例
Jan 26 Javascript
Element-ui upload上传文件限制的解决方法
Jan 22 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查找任何页面上的所有链接的方法
2013/12/03 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
javascript中clone对象详解
2014/12/03 Javascript
js使用心得分享
2015/01/13 Javascript
js中unicode转码方法详解
2015/10/09 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
2016/08/10 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
Python面向对象进阶学习
2019/05/21 Python
python 实现单通道转3通道
2019/12/03 Python
Python用input输入列表的实例代码
2020/02/07 Python
python中time包实例详解
2021/02/02 Python
亚马逊加拿大网站:Amazon.ca
2020/01/06 全球购物
出纳岗位职责
2013/11/09 职场文书
高一新生军训方案
2014/05/12 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
中学后勤工作总结2015
2015/07/22 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书
导游词之塘栖古镇
2019/12/04 职场文书
Nginx跨域问题解析与解决
2022/08/05 Servers