使用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 相关文章推荐
IE浏览器不支持getElementsByClassName的解决方法
Aug 27 Javascript
js获取域名的方法
Jan 27 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
Dec 04 Javascript
浅析javascript函数表达式
Feb 10 Javascript
JavaScript中的操作符类型转换示例总结
May 30 Javascript
javascript简单写的判断电话号码实例
May 24 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
Jan 22 jQuery
webpack4简单入门实例
Sep 06 Javascript
Vue触发式全局组件构建的方法
Nov 28 Javascript
jquery选择器和属性对象的操作实例分析
Jan 10 jQuery
uin-app+mockjs实现本地数据模拟
Aug 26 Javascript
vue导入.md文件的步骤(markdown转HTML)
Dec 31 Vue.js
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 应用程序安全防范技术研究
2009/09/25 PHP
解析link_mysql的php版
2013/06/30 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
php获取图片信息的方法详解
2015/12/10 PHP
session 加入redis的实现代码
2016/07/15 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
javascript实现校验文件上传控件实例
2015/04/20 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
Python中运算符&quot;==&quot;和&quot;is&quot;的详解
2016/10/08 Python
python正则表达式之对号入座篇
2018/07/24 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
wxPython实现文本框基础组件
2019/11/18 Python
python3 简单实现组合设计模式
2020/07/02 Python
Python 合并拼接字符串的方法
2020/07/28 Python
如何在Python3中使用telnetlib模块连接网络设备
2020/09/21 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
CSS3中currentColor关键字的妙用
2016/02/27 HTML / CSS
《李广射虎》教学反思
2014/04/27 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
Laravel中获取IP的真实地理位置
2021/04/01 PHP
Win11 BitLocker 驱动器加密
2022/04/19 数码科技