使用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使用手册之二 DOM操作
Mar 24 Javascript
JS 分号引起的一段调试问题
Jun 18 Javascript
当前页禁止复制粘贴截屏代码小集
Jul 24 Javascript
jquery学习总结(超级详细)
Sep 04 Javascript
jQuery获取DOM节点实例分析(2种方式)
Dec 15 Javascript
js select实现省市区联动选择
Apr 17 Javascript
javascript九宫格图片随机打乱位置的实现方法
Mar 15 Javascript
一次围绕setTimeout的前端面试经验分享
Jun 15 Javascript
vue将单页面改造成多页面应用的方法
Nov 25 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
Feb 21 Javascript
vue获取form表单的值示例
Oct 29 Javascript
使用vue构建多页面应用的示例
Oct 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(2)
2006/10/09 PHP
一个php Mysql类 可以参考学习熟悉下
2009/06/21 PHP
PHP 截取字符串专题集合
2010/08/19 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
ExtJS 2.0 实用简明教程之布局概述
2009/04/29 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
jQuery实现滚动切换的tab选项卡效果代码
2015/08/26 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
前端图片懒加载(lazyload)的实现方法(提高用户体验)
2017/08/21 Javascript
基于twbsPagination.js分页插件使用心得(分享)
2017/10/21 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
Vue 401配合Vuex防止多次弹框的案例
2020/11/11 Javascript
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
python中reload(module)的用法示例详解
2017/09/15 Python
5款非常棒的Python工具
2018/01/05 Python
Python处理中文标点符号大集合
2018/05/14 Python
django foreignkey(外键)的实现
2019/07/29 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
python 如何快速复制序列
2020/09/07 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
Original Penguin美国官网:布拉德皮特、强尼德普喜爱的服装品牌
2016/10/25 全球购物
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
法人代表证明书格式
2014/10/01 职场文书
个人学习群众路线心得体会
2014/11/05 职场文书