<table>
     <tr>
          <td width="300" class="jh" id="jh">
               <ul>
                    <li>...</li>
                    <li>...</li>
                    <li>...</li>
                    <li>...</li>
                    .
                    .
                    .
               </ul>
               <span id="more"><a id="gd" href="#">显示更多</a></span>
          </td>
     </tr>
</table>比如有这样的结构,如何做到:
1、在页面上看到的:内容只能显示一行,多余的li隐藏,并且在行尾跟着“显示更多”(一行内显示)
2、点击“显示更多”全部显示出来,紧跟“收起”(点击收起回到1状态)
3、如果<ul>内容在一行内可以显示完,那么最后的“<span>”就不显示条件:1、<li>中的内容长度不固定,所以<li>的宽度不能定死(但是再长也能在一行内放下)  2、一个<li>的内容不能分两行显示(要显示完整)
请各位高手帮帮忙,谢谢

解决方案 »

  1.   

    强制不换行 white-space:nowrap; js遍历li,除了第一个,其他都隐藏,同时也可以得到li的数量,进而判断是否加入span,点击显示更多,再次遍历li,将所有li都显示出来,并替换显示更多为收起,同样的点击收起,则反之
      

  2.   


    内容“只能显示一行”的意思不是只显示一个<li>,而是在一行中能放下几个<li>就放几个,放不下的<li>都隐藏。(还要考虑到<span>显示更多</span>所占的位置,也要显示在同一行中)
      

  3.   

    另外,也不能根据li的数量来判断是否加入span因为每个li中的内容长度不一样,有可能3个li加span就一行放满了;也有可能4个li加span才放满
      

  4.   

    那就遍历li, 计算到第几个li时加上span的宽度会大于td的宽度,这时候后面的li就都隐藏起来
      

  5.   

    怎么会出现大于td宽度的可能呢?因为整个ul都在td里面而且内容又不能溢出td,那一整行的所有li的宽度之和也不可能大于td的宽度啊?
      

  6.   

    所有li的宽度之和不会大于td的宽度,那要隐身什么?
      

  7.   

    如果大于td宽度会换行不会不会超出td的宽度,因为内容肯定都要显示在td之内的。是有什么办法控制如果要换行的话就隐藏第二行和之后的,这个倒是也好实现,但问题是要保证大于1行的时候span显示到一行的行尾,如果所有的li都能放到一行里面那span就不显示
      

  8.   

    计算所有li宽度之和跟换不换行没关系比如所有li都同一行,和li过多换到第二行,那li的宽度之和还是没变