javascript - 如何使用纯 javascript 而不是 jquery 构建加载更多 <li> 函数

标签 javascript html css listview

我在 codepen 中发现了这段很棒的代码:http://codepen.io/joe-watkins/pen/wBYbgN

但我正在尝试使用纯 javascript 来获得相同的功能,有谁知道这是否可能,我该如何实现 😉

非常感谢

var $parent = $("ul"),
    $items = $parent.find("li"),
    $loadMoreBtn = $("#load-more-comments"),
    maxItems = 10,
    hiddenClass = "visually-hidden";

		// add visually hidden class to items beyond maxItems
		$.each($items, function(idx,item){
      if(idx > maxItems - 1){
        $(this).addClass(hiddenClass);
      }
    });

		// onclick of show more button show more = maxItems
		// if there are none left to show kill show more button
		$loadMoreBtn.on("click", function(e){
      $("."+hiddenClass).each(function(idx,item){
        if(idx < maxItems - 1){
          $(this).removeClass(hiddenClass);
        }
        // kill button if no more to show
        if($("."+hiddenClass).size() === 0){
          $loadMoreBtn.hide();
        }
      });
    });
body {
  margin: 1em;
}

.visually-hidden { 
  position: absolute; 
  overflow: hidden; 
  clip: rect(0 0 0 0); 
  height: 1px; width: 1px; 
  margin: -1px; padding: 0; border: 0; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul> 
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
    <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
  <li class="item">Item</li>
</ul>

<button id="load-more-comments">Load More</button>

最佳答案

这是您提供的 js 代码的快速普通版本

// cache vars

var parent = document.querySelector('ul'),
    items  = parent.querySelectorAll('li'),
    loadMoreBtn =  document.querySelector('#load-more-comments'),
    maxItems = 10,
    hiddenClass = "visually-hidden";


[].forEach.call(items, function(item, idx){
    if (idx > maxItems - 1) {
        item.classList.add(hiddenClass);
    }
});

loadMoreBtn.addEventListener('click', function(){

  [].forEach.call(document.querySelectorAll('.' + hiddenClass), function(item, idx){
      console.log(item);
      if (idx < maxItems - 1) {
          item.classList.remove(hiddenClass);
      }

      if ( document.querySelectorAll('.' + hiddenClass).length === 0) {
          loadMoreBtn.style.display = 'none';
      }

  });

});

使用纯 js 的 codepen:

http://codepen.io/anon/pen/gpxPmN

事情是这样的,jquery 解决了不同浏览器在添加事件处理程序、ajaxing、查询 DOM 等方面的不一致,所以这绝对是使用它的优势,尤其是当你试图编写代码时支持 IE ;)

关于javascript - 如何使用纯 javascript 而不是 jquery 构建加载更多 <li> 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30835881/

相关文章:

javascript - Bootstrap 折叠面板不适用于移动设备

javascript - 如何使用jquery按类动态添加datePicker?

css - 小分辨率下的 Div 高度不一样

javascript - jquery 帮助布局

javascript - D3 中的计数总和

javascript - Atlassian 的 Jira 中的 CSS 类名被混淆了

javascript - 检索 JS 变量

javascript - 以 Angular 获取模态组件中的路由参数

javascript - post 请求完成后,url 发生意外更改

CSS 改变背景图片高度