CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  JavaScript

◆◆◆◆◆我就不信没有明白人:表格交替颜色问题,数据来自嵌入html的xml数据岛

楼主wilowind(杂而不精)2006-06-08 11:19:09 在 Web 开发 / JavaScript 提问

表格交替颜色问题,数据来自嵌入html的xml数据岛,   <   不用xsl>  
   
  下面html代码,第一个表格数据来自数据岛,   没有交替颜色。  
  怎么处理才能有颜色交替效果????  
  ------------------------------------  
  <html>  
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312"   />  
   
  <title>test</title>  
  <xml   id='DesignDataSource3'>  
  <?xml   version="1.0"   encoding="GB2312"?>  
  <ROWS>  
      <ROW>  
          <ID>1</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>中文</SUBJECT>  
          <MARK>90</MARK>  
      </ROW>  
      <ROW>  
          <ID>2</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>数学</SUBJECT>  
          <MARK>89</MARK>  
      </ROW>  
      <ROW>  
          <ID>3</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>自然</SUBJECT>  
          <MARK>87.5</MARK>  
      </ROW>  
      <ROW>  
          <ID>4</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>地理</SUBJECT>  
          <MARK>95</MARK>  
      </ROW>  
      <ROW>  
          <ID>5</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>历史</SUBJECT>  
          <MARK>86</MARK>  
      </ROW>  
      <ROW>  
          <ID>6</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>文学</SUBJECT>  
          <MARK>81</MARK>  
      </ROW>  
      <ROW>  
          <ID>7</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>逻辑设计</SUBJECT>  
          <MARK>91</MARK>  
      </ROW>  
      <ROW>  
          <ID>8</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>美术</SUBJECT>  
          <MARK>73</MARK>  
      </ROW>  
      <ROW>  
          <ID>9</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>音乐</SUBJECT>  
          <MARK>85.2</MARK>  
      </ROW>  
      <ROW>  
          <ID>10</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>数据结构</SUBJECT>  
          <MARK>95.5</MARK>  
      </ROW>  
  </ROWS>  
   
  </xml>  
  <style   type='text/css'>  
  tr{  
  background-color:expression((this.rowIndex%2==0)?"#00FF33":"#CCFF33")  
  }  
   
  td{  
  background-color:expression((this.parentElement.rowIndex%2==0)?"#00FF33":"#CCFF33")  
  }  
   
  div{  
  background-color:expression((this.parentElement.parentElement.rowIndex%2==0)?"#00FF33":"#CCFF33")  
  }  
  </style>  
   
  </head>  
  <body   >  
   
  <table   datasrc='#DesignDataSource3'   border='1'>  
  <tr   >  
  <td   >  
  <div   datafld='ID'></div>  
  </td>  
  <td   >  
  <div   datafld='STUDENT_ID'></div>  
  </td>  
  <td   >  
  <div   datafld='SUBJECT'></div>  
  </td>  
  <td   >  
  <div   datafld='MARK'   ></div>  
  </td>  
  </tr>  
  </table>  
  <hr>  
  <table   border='1'>  
  <tr   >  
  <td   >  
  <div>123</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  </tr>  
  <tr   >  
  <td   >  
  <div>123</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  </tr>  
  <tr   >  
  <td   >  
  <div>123</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  </tr>  
  <tr   >  
  <td   >  
  <div>123</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  </tr>  
  <tr   >  
  <td   >  
  <div>123</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  </tr>  
  </table>  
  </body>  
   
  </html>  
  问题点数:100、回复次数:25Top

1 楼BlueDestiny(Design Life - never-online.net)回复于 2006-06-08 13:33:22 得分 45

你expression里面判断只是看rowIndex%2,而下面这里明显就是一行,所以不可能变色的  
  <tr   >  
  <td   >  
  <div   datafld='ID'></div>  
  </td>  
  <td   >  
  <div   datafld='STUDENT_ID'></div>  
  </td>  
  <td   >  
  <div   datafld='SUBJECT'></div>  
  </td>  
  <td   >  
  <div   datafld='MARK'   ></div>  
  </td>  
  </tr>Top

2 楼BlueDestiny(Design Life - never-online.net)回复于 2006-06-08 13:34:10 得分 0

假如你改成这样:你看看变不变色?  
   
  <table   datasrc='#DesignDataSource3'   border='1'>  
  <tr   >  
  <td   >  
  <div   datafld='ID'></div>  
  </td>  
  <td   >  
  <div   datafld='STUDENT_ID'></div>  
  </td>  
  <td   >  
  <div   datafld='SUBJECT'></div>  
  </td>  
  <td   >  
  <div   datafld='MARK'   ></div>  
  </td>  
  </tr>  
  <tr   >  
  <td   >  
  <div   datafld='ID'></div>  
  </td>  
  <td   >  
  <div   datafld='STUDENT_ID'></div>  
  </td>  
  <td   >  
  <div   datafld='SUBJECT'></div>  
  </td>  
  <td   >  
  <div   datafld='MARK'   ></div>  
  </td>  
  </tr>  
  </table>Top

3 楼wilowind(杂而不精)回复于 2006-06-08 13:43:46 得分 0

改成2行倒是变色,可没什么意义。   显示了2份数据。  
  Top

4 楼wilowind(杂而不精)回复于 2006-06-08 13:50:33 得分 0

方法倒是有一个,   跟踪js代码发现tr的rowIndex能正确显示行号,故可以用js在html装载完数据后遍历表格行,改变颜色。   虽然没测试过,   应该是没问题的。  
   
  但我觉得太麻烦,想知道有没有简单的办法。Top

5 楼BlueDestiny(Design Life - never-online.net)回复于 2006-06-08 13:59:44 得分 0

你要一行里binding数据之后也会变色吗?有办法的。Top

6 楼wilowind(杂而不精)回复于 2006-06-08 14:14:23 得分 0

正如你说的,有什么办法?Top

7 楼DeluxWorld(曾经的你)回复于 2006-06-08 14:18:05 得分 5

好象没有什么简单的方法~  
  遍历表格行到是可行Top

8 楼BlueDestiny(Design Life - never-online.net)回复于 2006-06-08 14:24:33 得分 0

==,我在把想法实践一下,否则不行的话,那就出笑话了:DTop

9 楼meizz(梅花雪)回复于 2006-06-08 14:25:56 得分 45

这个问题可能是渲染的前后顺序有关。即在数据绑定之前,表格里只有一行,CSS对表格进行了单色的渲染,之后数据绑定操作,(不知是完全拷贝这个第一行的渲染效果还是其它什么原因),后续添加的行只延用了第一行的样式。这个问题可能与浏览器系统有关,我无力改写其代码,不过针对这种现象还是有办法可以补救的,就是让CSS的渲染动作发生成数据绑定之后:  
   
  <html>  
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312"   />  
   
  <title>test</title>  
  <xml   id='DesignDataSource3'>  
  <?xml   version="1.0"   encoding="GB2312"?>  
  <ROWS>  
      <ROW>  
          <ID>1</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>中文</SUBJECT>  
          <MARK>90</MARK>  
      </ROW>  
      <ROW>  
          <ID>2</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>数学</SUBJECT>  
          <MARK>89</MARK>  
      </ROW>  
      <ROW>  
          <ID>3</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>自然</SUBJECT>  
          <MARK>87.5</MARK>  
      </ROW>  
      <ROW>  
          <ID>4</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>地理</SUBJECT>  
          <MARK>95</MARK>  
      </ROW>  
      <ROW>  
          <ID>5</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>历史</SUBJECT>  
          <MARK>86</MARK>  
      </ROW>  
      <ROW>  
          <ID>6</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>文学</SUBJECT>  
          <MARK>81</MARK>  
      </ROW>  
      <ROW>  
          <ID>7</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>逻辑设计</SUBJECT>  
          <MARK>91</MARK>  
      </ROW>  
      <ROW>  
          <ID>8</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>美术</SUBJECT>  
          <MARK>73</MARK>  
      </ROW>  
      <ROW>  
          <ID>9</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>音乐</SUBJECT>  
          <MARK>85.2</MARK>  
      </ROW>  
      <ROW>  
          <ID>10</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>数据结构</SUBJECT>  
          <MARK>95.5</MARK>  
      </ROW>  
  </ROWS>  
   
  </xml>  
  <style   type='text/css'>  
  .mm   tr  
  {  
  background-color:expression((this.rowIndex%2==0)?"#00FF33":"#CCFF33")  
  }  
   
  .mm   td  
  {  
  background-color:expression((this.parentElement.rowIndex%2==0)?"#00FF33":"#CCFF33")  
  }  
  </style>  
   
  </head>  
  <body   onload="document.getElementById('Tab').className='mm'">  
   
  <table   id="Tab"   datasrc='#DesignDataSource3'   border='1'>  
  <tr   >  
  <td   >  
  <div   datafld='ID'></div>  
  </td>  
  <td   >  
  <div   datafld='STUDENT_ID'></div>  
  </td>  
  <td   >  
  <div   datafld='SUBJECT'></div>  
  </td>  
  <td   >  
  <div   datafld='MARK'   ></div>  
  </td>  
  </tr>  
  </table>  
  <hr>  
  <table   class="mm"   border='1'>  
  <tr   >  
  <td   >  
  <div>123</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  </tr>  
  <tr   >  
  <td   >  
  <div>123</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  </tr>  
  <tr   >  
  <td   >  
  <div>123</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  </tr>  
  <tr   >  
  <td   >  
  <div>123</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  </tr>  
  <tr   >  
  <td   >  
  <div>123</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  <td   >  
  <div>234</div>  
  </td>  
  </tr>  
  </table>  
  </body>  
   
  </html>Top

10 楼coder1(穿上防砖马甲和党员干部打成一片)回复于 2006-06-08 14:29:55 得分 5

帮顶Top

11 楼wilowind(杂而不精)回复于 2006-06-08 14:38:22 得分 0

meizz(梅花雪)   对原理分析的比较清楚,   方法也是可行的。   比我的遍历行高明多了。  
  再等等,看BlueDestiny(www.never-online.net)   有没有什么其他好的方法。  
   
  不久揭帖Top

12 楼BlueDestiny(Design Life - never-online.net)回复于 2006-06-08 14:44:48 得分 0

的确,未binding前的数据row.length为1,onload后,数据岛自动会生动tr,td等标签,有点像.net里面的控件,我想过很多方法想来实现不用遍历就可以得出的方法,但目前为止还没有得到答案,如果要expression的话,  
  <html>  
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312"   />  
   
  <title>test</title>  
  <xml   id='DesignDataSource3'>  
  <?xml   version="1.0"   encoding="GB2312"?>  
  <ROWS>  
      <ROW>  
          <ID>1</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>中文</SUBJECT>  
          <MARK>90</MARK>  
      </ROW>  
      <ROW>  
          <ID>2</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>数学</SUBJECT>  
          <MARK>89</MARK>  
      </ROW>  
      <ROW>  
          <ID>3</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>自然</SUBJECT>  
          <MARK>87.5</MARK>  
      </ROW>  
      <ROW>  
          <ID>4</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>地理</SUBJECT>  
          <MARK>95</MARK>  
      </ROW>  
      <ROW>  
          <ID>5</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>历史</SUBJECT>  
          <MARK>86</MARK>  
      </ROW>  
      <ROW>  
          <ID>6</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>文学</SUBJECT>  
          <MARK>81</MARK>  
      </ROW>  
      <ROW>  
          <ID>7</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>逻辑设计</SUBJECT>  
          <MARK>91</MARK>  
      </ROW>  
      <ROW>  
          <ID>8</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>美术</SUBJECT>  
          <MARK>73</MARK>  
      </ROW>  
      <ROW>  
          <ID>9</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>音乐</SUBJECT>  
          <MARK>85.2</MARK>  
      </ROW>  
      <ROW>  
          <ID>10</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>数据结构</SUBJECT>  
          <MARK>95.5</MARK>  
      </ROW>  
  </ROWS>  
   
  </xml>  
   
   
  </head>  
  <body   >  
  <style>  
  <!--  
  table   {  
  never-online:expression(onreadystatechange=function()   {  
  if(this.getAttribute("datasrc"))   {  
  if(this.readyState=="complete")   {  
  for(var   i=0;   i<this.rows.length;   i++)   {  
  rows[i].style.backgroundColor   =   (i%2==0)   ?   "#006600"   :   "#009900";  
  rows[i].style.color   =   "#fff";  
  }  
  }  
  }  
  });  
  }  
  -->  
  </style>  
  <table   datasrc='#DesignDataSource3'   border='1'   id="tblDs">  
  <tr   >  
  <td   >  
  <div   datafld='ID'></div>  
  </td>  
  <td   >  
  <div   datafld='STUDENT_ID'></div>  
  </td>  
  <td   >  
  <div   datafld='SUBJECT'></div>  
  </td>  
  <td   >  
  <div   datafld='MARK'   ></div>  
  </td>  
  </tr>  
  </table>  
  </body>  
   
  </html>  
  Top

13 楼dh20156(风之石)回复于 2006-06-08 14:49:58 得分 0

支持梅花雪的意见!Top

14 楼meizz(梅花雪)回复于 2006-06-08 14:50:59 得分 0

BlueDestiny   与其你在CSS里写这么多的代码,还不如直接写个HTC来得清爽Top

15 楼BlueDestiny(Design Life - never-online.net)回复于 2006-06-08 14:51:58 得分 0

不过现在又有个想法,用expression   判断是否载入完毕,如果是的话,自动把rows的className绑到table上,也就是结合meizz的styel   class  
   
  我试试看。wait   a   moment...Top

16 楼BlueDestiny(Design Life - never-online.net)回复于 2006-06-08 14:53:04 得分 0

meizz  
   
  呵呵,我是看楼主喜欢expression,所以也就写了个expression,只是技术讨论,见笑了。:DTop

17 楼BlueDestiny(Design Life - never-online.net)回复于 2006-06-08 14:59:58 得分 0

<html>  
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312"   />  
   
  <title>test</title>  
  <xml   id='DesignDataSource3'>  
  <?xml   version="1.0"   encoding="GB2312"?>  
  <ROWS>  
      <ROW>  
          <ID>1</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>中文</SUBJECT>  
          <MARK>90</MARK>  
      </ROW>  
      <ROW>  
          <ID>2</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>数学</SUBJECT>  
          <MARK>89</MARK>  
      </ROW>  
      <ROW>  
          <ID>3</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>自然</SUBJECT>  
          <MARK>87.5</MARK>  
      </ROW>  
      <ROW>  
          <ID>4</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>地理</SUBJECT>  
          <MARK>95</MARK>  
      </ROW>  
      <ROW>  
          <ID>5</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>历史</SUBJECT>  
          <MARK>86</MARK>  
      </ROW>  
      <ROW>  
          <ID>6</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>文学</SUBJECT>  
          <MARK>81</MARK>  
      </ROW>  
      <ROW>  
          <ID>7</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>逻辑设计</SUBJECT>  
          <MARK>91</MARK>  
      </ROW>  
      <ROW>  
          <ID>8</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>美术</SUBJECT>  
          <MARK>73</MARK>  
      </ROW>  
      <ROW>  
          <ID>9</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>音乐</SUBJECT>  
          <MARK>85.2</MARK>  
      </ROW>  
      <ROW>  
          <ID>10</ID>  
          <STUDENT_ID>1</STUDENT_ID>  
          <SUBJECT>数据结构</SUBJECT>  
          <MARK>95.5</MARK>  
      </ROW>  
  </ROWS>  
   
  </xml>  
   
   
  </head>  
  <body   >  
  <style>  
  <!--  
  table   {  
  never-online:expression(onreadystatechange=function(){this.readyState=="complete"   ?   this.className   =   "mm"   :   "";});  
  }  
  .mm   tr  
  {  
  background-color:expression((this.rowIndex%2==0)?"#00FF33":"#CCFF33")  
  }  
   
  .mm   td  
  {  
  background-color:expression((this.parentElement.rowIndex%2==0)?"#00FF33":"#CCFF33")  
  }  
  -->  
  </style>  
  <table   datasrc='#DesignDataSource3'   border='1'   id="tblDs">  
  <tr   >  
  <td   >  
  <div   datafld='ID'></div>  
  </td>  
  <td   >  
  <div   datafld='STUDENT_ID'></div>  
  </td>  
  <td   >  
  <div   datafld='SUBJECT'></div>  
  </td>  
  <td   >  
  <div   datafld='MARK'   ></div>  
  </td>  
  </tr>  
  </table>  
  </body>  
   
  </html>  
   
  Top

18 楼wilowind(杂而不精)回复于 2006-06-08 15:02:11 得分 0

好,有如此多的好想法,   我得好好看看,   哪个适合我的情况。Top

19 楼BlueDestiny(Design Life - never-online.net)回复于 2006-06-08 15:02:20 得分 0

在expression里table的onload事件不会触发,所以只有用onreadystatechange来绑在CSS上了Top

20 楼BlueDestiny(Design Life - never-online.net)回复于 2006-06-08 15:02:33 得分 0

在expression里table的onload事件不会触发,所以只有用onreadystatechange来绑在CSS上了Top

21 楼wilowind(杂而不精)回复于 2006-06-08 15:23:00 得分 0

不错,2种方法,异曲同工。  
  我的问题应该是解决了。  
   
  揭帖。Top

22 楼wilowind(杂而不精)回复于 2006-06-08 15:25:44 得分 0

我更偏向于用class,   因为一个页面不止一个这样的table,且table的id事先是不确定的。Top

23 楼wilowind(杂而不精)回复于 2006-06-08 15:27:47 得分 0

或者getElementByName也是可以的。Top

24 楼theforever(碧海情天)回复于 2006-06-09 10:04:33 得分 0

MARKTop

25 楼fest(fest)回复于 2006-06-09 12:01:32 得分 0

markTop

相关问题

关键词

得分解答快速导航

  • 帖主:wilowind
  • BlueDestiny
  • DeluxWorld
  • meizz
  • coder1

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo