使用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 相关文章推荐
Div自动滚动到末尾的代码
Oct 26 Javascript
通过js动态操作table(新增,删除相关列信息)
May 23 Javascript
jQuery中width()方法用法实例
Dec 24 Javascript
jQuery实现延迟跳转的方法
Jun 05 Javascript
Javascript对象Clone实例分析
Jun 09 Javascript
Javascript 是你的高阶函数(高级应用)
Jun 15 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
Dec 28 Javascript
JS获得多个同name 的input输入框的值的实现方法
Jan 09 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
Oct 24 Javascript
8个有意思的JavaScript面试题
Jul 30 Javascript
JavaScript观察者模式原理与用法实例详解
Mar 10 Javascript
如何使用原生Js实现随机点名详解
Jan 06 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生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
js jquery做的图片连续滚动代码
2008/01/06 Javascript
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
表单验证的完整应用案例探讨
2013/03/29 Javascript
使用jQuery jqPlot插件绘制柱状图
2014/12/18 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
vue-cli之router基本使用方法详解
2017/10/17 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
vue实现搜索功能
2019/05/28 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
小程序实现密码输入框
2020/11/16 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
Python人脸识别第三方库face_recognition接口说明文档
2019/05/03 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
python logging.info在终端没输出的解决
2020/05/12 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
跑步爱好者一站式服务网站:Jack Rabbit
2016/09/01 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
土木工程专业个人求职信
2013/12/05 职场文书
副职竞争上岗演讲稿
2014/05/12 职场文书
教师个人年度总结
2015/02/11 职场文书
远程教育学习心得体会
2016/01/23 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书
Java实现多线程聊天室
2021/06/26 Java/Android
详解Vue的列表渲染
2021/11/20 Vue.js
Pandas-DataFrame知识点汇总
2022/03/16 Python