jquery – 如何在语义上将单个列表分成多个列?

前端之家收集整理的这篇文章主要介绍了jquery – 如何在语义上将单个列表分成多个列?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > CSS: Set divs horizontally in 2 rows4个
我们的网站用于将单个列表分成多列的当前方法是使用多个uls:
  1. <ul>
  2. <li>one</li>
  3. <li>two</li>
  4. </ul>
  5. <ul>
  6. <li>three</li>
  7. <li>four</li>
  8. </ul>

这对我来说似乎并不理想,因为从语义上讲,它不是两个列表,而是一个列表.我已经看到很多不适合多列列表的解决方案.我正在寻找一个解决方案:

>使用以下标记结构

  1. <ul>
  2. <li>one</li>
  3. <li>two</li>
  4. <li>three</li>
  5. <li>four</li>
  6. </ul>

>组织如下:

  1. one three
  2. two four

不是这个:

  1. one two
  2. three four

>如果列表长度发生更改,或者项目包含多行,则无需修改即可工作.
>使用有效的语义HTML.
>适用于IE8.

理想的解决方案仅限CSS,但我愿意使用jQuery UI或轻量级Javascript.

(PS,here’s my CSS attempt,有明显的问题.)

编辑:此问题特定于语义列表.另一个所谓的“重复”问题是关于< div>元素,这是一个不同的球赛,因为允许额外的标记. < ul>之间不允许额外的标记.和< li>.这个问题集中在语义上,这意味着强调使用HTML尽可能详细地指出内容的含义.

解决方法

您可以将列用于支持它的浏览器

DEMO http://jsfiddle.net/kevinPHPkevin/eaewX/33/

这是一个完整浏览器支持的jQuery示例

DEMO http://jsfiddle.net/kevinPHPkevin/MKL4g/131/

  1. var postsArr = new Array(),$postsList = $('ul.posts');
  2.  
  3. //Create array of all posts in lists
  4. $postsList.find('li').each(function(){
  5. postsArr.push($(this).html());
  6. })
  7.  
  8. //Split the array at this point. The original array is altered.
  9. var firstList = postsArr.splice(0,Math.round(postsArr.length / 2)),secondList = postsArr,ListHTML = '';
  10.  
  11. function createHTML(list){
  12. ListHTML = '';
  13. for (var i = 0; i < list.length; i++) {
  14. ListHTML += '<li>' + list[i] + '</li>'
  15. };
  16. }
  17.  
  18. //Generate HTML for first list
  19. createHTML(firstList);
  20. $postsList.html(ListHTML);
  21.  
  22. //Generate HTML for second list
  23. createHTML(secondList);
  24. //Create new list after original one
  25. $postsList.after('<ul class="posts"></ul>').next().html(ListHTML);

猜你在找的jQuery相关文章