使用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变强势
Jun 22 Javascript
jquery 如何动态添加、删除class样式方法介绍
Nov 07 Javascript
js 判断图片是否加载完以及实现图片的预下载
Aug 14 Javascript
15位和18位身份证JS校验的简单实例
Jul 18 Javascript
Angular 常用指令实例总结整理
Dec 13 Javascript
javascript作用域链与执行环境详解
Mar 25 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
Sep 21 Javascript
JS实现页面数据懒加载
Feb 13 Javascript
简单了解Vue + ElementUI后台管理模板
Apr 07 Javascript
JS如何实现手机端输入验证码效果
May 13 Javascript
浅谈JavaScript 声明提升
Sep 14 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
Oct 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获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
php获取汉字首字母的函数
2013/11/07 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
关于IFRAME 自适应高度的研究
2006/07/20 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
2013/12/13 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
2015/01/31 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
three.js实现圆柱体
2018/12/30 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
2019/09/10 Javascript
Vue学习之axios的使用方法实例分析
2020/01/06 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
举例讲解Python中装饰器的用法
2015/04/27 Python
Python的Django框架中的表单处理示例
2015/07/17 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
高级编程求职信模板
2014/02/16 职场文书
给市场的环保建议书
2014/05/14 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
幼儿园辞职书
2015/02/26 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js
win sever 2022如何占用操作主机角色
2022/06/25 Servers