jQuery之表常用操作

就table的一些常用操作做了一个综合的例子,包括行条纹 高亮 工具条提示 扩展 折叠 筛选等效果。

效果图如下:

下面我把我写的例子拆分解释一下:

1 . 行条纹

Js代码 复制代码 收藏代码
  1. varrowIndex=0;
  2. $("tbodytr").each(function(index){
  3. if($("th",this).length){//检查当前行是否包含th元素
  4. $(this).addClass("subhead");
  5. rowIndex=-1;
  6. }
  7. else{
  8. if(rowIndex%4<2){
  9. $(this).removeClass("odd").addClass("even");//为奇数组添加even样式
  10. }
  11. else{
  12. $(this).removeClass("even").addClass("odd");//为偶数组添加odd样式
  13. }
  14. }
  15. rowIndex++;
  16. )};

这段代码(rowIndex%4 < 2)是两行一组交替换色。

如果是三行一组交替换色,就是rowIndex%6 < 3,...依次类推。

通常情况下我们用到最多的是隔行换色,比这个两行一组交替换色要简单。

jquery提供了方法:

:even : 匹配所有索引值为偶数的元素,从 0 开始计数。例如$("tr:even");

:odd:匹配所有索引值为奇数的元素,从 0 开始计数。例如$("tr:odd")。

或者用:nth-child(index):匹配其父元素下的第N个子或奇偶元素,从1开始计数。例如(":nth-child(2)"偶数行)

2 .高亮(突出显示行)

Js代码 复制代码 收藏代码
  1. varcolumn=3;
  2. $("table.stripedtbodytr").each(function(index){
  3. $("td:nth("+column+")",this).addClass("clickable").click(function(){
  4. varthisClicked=$(this).text();//把当前单击的td标签内容赋给变量
  5. $("table.stripedtbodytr").each(function(){//遍历tbody里的所有tr标签
  6. if(thisClicked==$("td:nth("+column+")",this).text()){//检查tbody当前列里是否有和单击的td标签内容匹配的td
  7. $(this).addClass("highlight");
  8. }
  9. else{
  10. $(this).removeClass("highlight");
  11. }
  12. });
  13. })
  14. });

这段代码可以增强表格的视觉效果,是基于用户的交互突出显示相关的行。

3 .工具条提示

Js代码 复制代码 收藏代码
  1. varhighlighted="";
  2. //定位工具提示条
  3. varpositionTooltip=function(event){
  4. vartPosX=event.pageX-5;
  5. vartPosY=event.pageY+20;
  6. $("div.tooltip").css({left:tPosX,top:tPosY});
  7. };
  8. //显示工具提示条
  9. varshowTooltip=function(event){
  10. $("div.tooltip").remove();
  11. var$thisTopic=$(this).text();
  12. if($(this).parent().is(".highlight")){//检查当前tr的样式是否是highlight
  13. highlighted="un-";
  14. }
  15. else{
  16. highlighted=""
  17. }
  18. $("<divclass='tooltip'>Clickto"+highlighted+"highlightalltopicswrittenby"+$thisTopic+"</div>").appendTo("body");
  19. //给工具提示条增加内容,
  20. //如果当前tr的样式是highlight,那么工具条的内容是:Clicktoun-highlightalltopicswrittenby$thisTopic;
  21. //如果当前tr的样式不是highlight,那么工具条的内容是:Clicktohighlightalltopicswrittenby$thisTopic.
  22. positionTooltip(event);
  23. };
  24. //隐藏工具提示条
  25. varhideTooltip=function(){
  26. $("div.tooltip").remove();
  27. };

尽管行突出效果是一种很有用的特性,但就目前来讲,这些特性存在与否对用户而言并不明显。尽管我们可以为所有要单击的标签添加clickable类,使鼠标悬停在这些标签上时,光标变成手的形状。当用户仍然无从知晓单击这个标签会发生什么事情。为此,进一步添加与单击会发生的情况有关的说明是必要的。


4 .折叠和扩展

Js代码 复制代码 收藏代码
  1. vartoggleMins="images/iconopen.gif";
  2. vartogglePlus="images/iconclose.gif";
  3. var$subHead=$("tbodyth:first-child");
  4. $subHead.prepend("<imgsrc='"+toggleMins+"'alt='collapsethissection'/>");
  5. $("img",$subHead).addClass("clickable").click(function(){
  6. vartoggleSrc=$(this).attr("src");
  7. if(toggleSrc==toggleMins){
  8. $(this).attr("src",togglePlus).parents("tr").siblings().fadeOut("fast");
  9. }
  10. else{
  11. $(this).attr("src",toggleMins).parents("tr").siblings().not(".filtered").fadeIn("fast");
  12. }
  13. });

这里用了fadeIn(speed) 和fadeOut(speed)方法,speed (String,Number) :三种预定速度之一的字符串("slow", "normal", or "fast")或表示动画时长的毫秒数值(如:1000)

当表格中以分组的方式包含大量的数据时,如果能都折叠或者隐藏一部分表格的内容,就可以减少页面滚动,从而方便对表格中的所有数据进行更清晰地查看。

5 .筛选(Filter by Topic列)

Js代码 复制代码 收藏代码
  1. $("table.striped").each(function(){
  2. var$table=$(this);
  3. $table.find("th").each(function(){
  4. if($(this).is(".filter-column")){
  5. //把样式为filter-column的div赋给变量$filters
  6. var$filters=$("<divclass='filter-column'><h3>Filterby"+$(this).text()+":</h3></div>");
  7. //把topic一列所有出现的过的关键字加到keywords数组
  8. varkeywords={};
  9. $table.find("tbodytrtd").filter(":nth-child("+(column+1)+")").each(function(){
  10. keywords[$(this).text()]=$(this).text();
  11. });
  12. //在样式为filter-column的div加一个all按钮,显示所有的表格行
  13. $("<divclass='filter'>all</div>").click(function(){
  14. $table.find("tbodytr").show();
  15. $(this).addClass("active").siblings().removeClass("active");
  16. $("img","tbodytrth").attr("src",toggleMins);
  17. }).addClass("clickableactive").appendTo($filters);
  18. $.each(keywords,function(index,keyword){
  19. $("<divclass='filter'></div>").text(keyword).bind("click",{"keyword":keyword},function(event){
  20. $table.find("tbodytr").each(function(){
  21. if($("td",this).filter(":nth-child("+(column+1)+")").text()==event.data["keyword"]){
  22. $(this).show();
  23. }
  24. elseif($("th",this).length==0){
  25. $(this).hide();
  26. }
  27. });
  28. $(this).addClass("active").siblings().removeClass("active");
  29. }).addClass("clickable").appendTo($filters);//把内容为keywords样式为filter的div加入到样式为filter-column的div里
  30. });
  31. $filters.insertBefore($table);//把样式为filter-column的div插入到table前
  32. }
  33. });
    通过只向用户显示匹配给定条件的表格行,可以省去用户不必要的分心。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值