表格一开始时没有任何class的,想通过jquery添加.有以下要求:
1.为所有加上class,实现迭代计数,如果到下一个节点,重新计数。(tr为row1 th和td为col1)
2.tbody偶数行加上alt
3.若为第一或最后一项,则加上first/last
若只有一项,则first last
4.注意一个页面有可能有多个table生成的样例如下:
<!DOCTYPE html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
//
</script>
</head>
<body>
<table>
<thead>
<tr>
<th class="col0 first">A</th>
<th class="col1">B</th>
<th class="col2">C</th>
<th class="col3">D</th>
<th class="col4 last">E</th>
</tr>
</thead>
<tbody>
<tr class="row0 first">
<td class="col0 first">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
<tr class="row1 alt">
<td class="col0 first">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
<tr class="row2">
<td class="col0 first">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
<tr class="row3 last alt">
<td class="col0 first">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
</tbody>
<tfoot>
<tr class="row0 first">
<td class="col0 first">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
</tfoot>
</table>
<table>
<thead>
<tr>
<th class="col0 first">A</th>
<th class="col1">B</th>
<th class="col2">C</th>
<th class="col3">D</th>
<th class="col4 last">E</th>
</tr>
</thead>
<tbody>
<tr class="row0 first">
<td class="col0 first last">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
</tbody>
<tfoot>
<tr class="row0 first">
<td class="col0 first">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
</tfoot>
</table>
</body>
1.为所有加上class,实现迭代计数,如果到下一个节点,重新计数。(tr为row1 th和td为col1)
2.tbody偶数行加上alt
3.若为第一或最后一项,则加上first/last
若只有一项,则first last
4.注意一个页面有可能有多个table生成的样例如下:
<!DOCTYPE html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
//
</script>
</head>
<body>
<table>
<thead>
<tr>
<th class="col0 first">A</th>
<th class="col1">B</th>
<th class="col2">C</th>
<th class="col3">D</th>
<th class="col4 last">E</th>
</tr>
</thead>
<tbody>
<tr class="row0 first">
<td class="col0 first">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
<tr class="row1 alt">
<td class="col0 first">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
<tr class="row2">
<td class="col0 first">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
<tr class="row3 last alt">
<td class="col0 first">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
</tbody>
<tfoot>
<tr class="row0 first">
<td class="col0 first">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
</tfoot>
</table>
<table>
<thead>
<tr>
<th class="col0 first">A</th>
<th class="col1">B</th>
<th class="col2">C</th>
<th class="col3">D</th>
<th class="col4 last">E</th>
</tr>
</thead>
<tbody>
<tr class="row0 first">
<td class="col0 first last">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
</tbody>
<tfoot>
<tr class="row0 first">
<td class="col0 first">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
</tfoot>
</table>
</body>
<input type="button" id="btnClear" value="Clear" />
<input type="button" id="btnBuild" value="Build" /></p>$(document).ready(function () {
$('#btnClear').click(function () {
$('tr,th,td').removeClass();
}); $('#btnBuild').click(function () {
$('table').each(function () {
var i = 0;
$(this).find('thead th').each(function () {
$(this).addClass('col' + i);
i++;
}); $(this).find('thead th:first').addClass('first');
$(this).find('thead th:last').addClass('last'); i = 0;
$(this).find('tbody tr').each(function () {
$(this).addClass('row' + i.toString() + ((i % 2 === 1) ? ' alt' : ''));
i++;
var j = 0;
$(this).find('td').each(function () {
$(this).addClass('col' + j);
j++;
}); $(this).find('td:first').addClass('first');
$(this).find('td:last').addClass('last');
});
//$(this).find('thead tr:first').addClass('first');
//$(this).find('thead tr:last').addClass('last'); i = 0;
$(this).find('tfooter tr').each(function () {
$(this).addClass('row' + i + i % 2 ? ' alt' : ''); var j = 0;
$(this).find('td').each(function () {
$(this).addClass('col' + i);
j++;
}); $(this).find('td:first').addClass('first');
$(this).find('td:last').addClass('last');
});
$(this).find('tfooter tr:first').addClass('first');
$(this).find('tfooter tr:last').addClass('last');
});
});
});
<tbody>
<tr class="row0 first">
<td class="col0 first last">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
</tbody>
$(function () {
var fn_handle = function ($jq) {
$jq.first().addClass('first').end().last().addClass('last').end().each(function (i) {
$(this).addClass('row' + i + ((i + 1) % 2 == 0 ? ' alt' : '')).find('td').first().addClass('first').end().last().addClass('last').end().each(function (i) {
$(this).addClass('col' + i);
});
});
}
$('table').each(function () {
//处理thead
$(this).find('thead th').first().addClass('first').end().last().addClass('last').end().each(function (i) {
$(this).addClass('col' + i);
});
//处理tbody
fn_handle($(this).find('tbody tr'));
//处理tfoot
fn_handle($(this).find('tfoot tr'));
});
});
</script>
<tbody>
<tr class="row0 first">
<td class="col0 first last">A</td>
<td class="col1">B</td>
<td class="col2">C</td>
<td class="col3">D</td>
<td class="col4 last">E</td>
</tr>
</tbody>
2.选择器使用:first-child$('#btnBuild').click(function () {
$('table').each(function () {
var i = 0;
$(this).find('thead th').each(function () {
$(this).addClass('col' + i);
i++;
}); $(this).find('thead th:first-child').addClass('first');
$(this).find('thead th:last-child').addClass('last'); i = 0;
$(this).find('tbody tr').each(function () {
$(this).addClass('row' + i.toString() + ((i % 2 === 1) ? ' alt' : ''));
i++;
var j = 0;
$(this).find('td').each(function () {
$(this).addClass('col' + j);
j++;
}); $(this).find('td:first-child').addClass('first');
$(this).find('td:last-child').addClass('last');
});
$(this).find('tbody tr:first-child').addClass('first');
$(this).find('tbody tr:last-child').addClass('last'); i = 0;
$(this).find('tfoot tr').each(function () {
$(this).addClass('row' + i + i % 2 ? ' alt' : ''); var j = 0;
$(this).find('td').each(function () {
$(this).addClass('col' + i);
j++;
}); $(this).find('td:first-child').addClass('first');
$(this).find('td:last-child').addClass('last');
});
$(this).find('tfoot tr:first-child').addClass('first');
$(this).find('tfoot tr:last-child').addClass('last');
});
4楼更好,因为tbody与tfoor逻辑相同,thead不一样,所以提取出来了,而且链式连接更精简。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head><body>
<table>
<thead>
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
</tr>
</thead>
<tbody>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
</tfoot>
</table>
<table>
<thead>
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
</tr>
</thead>
<tbody>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
</tfoot>
</table>
<script src="jquery.js"></script>
<script>
(function($, window, undefined){
$.fn.autoTable = function(){
if(this.length === 0){
return;
}
this.each(function(index, elem){
var $thead_tr = $('thead', this).children(),
$tbody_tr = $('tbody', this).children(),
$tfoot_tr = $('tfoot', this).children();
$thead_tr.autoClass();
$tbody_tr.autoClass();
$tbody_tr.autoEvenClass();
$tfoot_tr.autoClass();
$thead_tr.each(function(){
$(this).children().autoClass();
});
$tbody_tr.each(function(){
$(this).children().autoClass();
});
$tfoot_tr.each(function(){
$(this).children().autoClass();
});
});
}
$.fn.autoClass = function(){
var len = this.length;
this.each(function(index, elem){
var $elem = $(elem),
clz = '';
switch($elem.prop('tagName')){
case 'TR':
clz = 'row';
break;
case 'TD':
case 'TH':
clz = 'col';
break;
}
$elem.addClass(clz + index);
if(index === 0){
$elem.addClass('first');
}
if(index === len - 1){
$elem.addClass('last');
}
});
}
$.fn.autoEvenClass = function(){
this.each(function(index, elem){
if(index % 2 === 1){
$(elem).addClass('alt');
}
});
}
})(jQuery, window);
$(function(){
$('table').autoTable();
});
</script>
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head><body>
<table>
<thead>
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
</tr>
</thead>
<tbody>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
</tfoot>
</table>
<table>
<thead>
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
</tr>
</thead>
<tbody>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
</tfoot>
</table>
<script src="jquery.js"></script>
<script>
(function($, window, undefined){
$.fn.autoTable = function(){
if(this.length === 0){
return;
}
this.each(function(index, elem){
$('thead', this).children().autoClass().each(function(){
$(this).children().autoClass();
});
$('tbody', this).children().autoClass().autoEvenClass().each(function(){
$(this).children().autoClass();
});
$tfoot_tr = $('tfoot', this).children().autoClass().each(function(){
$(this).children().autoClass();
});
});
return this;
}
$.fn.autoClass = function(){
var len = this.length;
this.each(function(index, elem){
var $elem = $(elem),
clz = '';
switch($elem.prop('tagName')){
case 'TR':
clz = 'row';
break;
case 'TD':
case 'TH':
clz = 'col';
break;
}
$elem.addClass(clz + index);
if(index === 0){
$elem.addClass('first');
}
if(index === len - 1){
$elem.addClass('last');
}
});
return this;
}
$.fn.autoEvenClass = function(){
this.each(function(index, elem){
if(index % 2 === 1){
$(elem).addClass('alt');
}
});
return this;
}
})(jQuery, window);
$(function(){
$('table').autoTable();
});
</script>
</body>
</html>
jQuery("table[class^=tableStyle]").each(function(){
var $thead=jQuery(this).children("thead");
if($thead!=null){
//will udpate to th
var $thead_tr=$thead.children("tr");
if($thead_tr.length>1){
$thead.children("tr").each(function(index){
jQuery(this).addClass("row"+index);
jQuery(this).children("th").each(function(index){
jQuery(this).addClass("col"+index);
}).first().addClass("first").end().last().addClass("last");
}).first().addClass("first").end().last().addClass("last");
}else{
$thead.children("tr").each(function(){
jQuery(this).children("th").each(function(index){
jQuery(this).addClass("col"+index);
}).first().addClass("first").end().last().addClass("last");
});
}
if(jQuery(this).hasClass("sortable")){
$thead.children("tr").last().addClass("sortableRow");
}
}
var $tbody=jQuery(this).children("tbody");
if($tbody!=null){
$tbody.children("tr").each(function(index){
jQuery(this).addClass("row"+index);
jQuery(this).children("td").each(function(col_index){
jQuery(this).addClass("col"+col_index);
}).first().addClass("first").end().last().addClass("last");
if(index%2==1){
//even
jQuery(this).addClass("alt");
}
}).first().addClass("first").end().last().addClass("last");
}
//tfoot
var $tfoot=jQuery(this).children("tfoot");
if($tfoot!=null){
//will udpate to th
$tfoot.children("tr").each(function(){
jQuery(this).children("td").each(function(index){
jQuery(this).addClass("col"+index);
}).first().addClass("first").end().last().addClass("last");
});
}
});
});