【问题标题】:simple javascript pagination for <li><a href<li><a href 的简单 javascript 分页
【发布时间】:2016-10-11 19:24:28
【问题描述】:

我正在尝试为我的&lt;li&gt; 链接创建一个简单的(仅下一个前一个按钮)javascript 分页。 这是我的链接列表:

<div class="panel-body">
    <div id="listingTable">
        <ul id = "Mylinks" class="paging">
            <li style="display: none;"><a href="http://site1.com" rel="nofollow">Description1</a></li>
            <li style="display: none;"><a href="http://site2.com" rel="nofollow">Description2</a></li>
            <li style="display: none;"><a href="http://site3.com" rel="nofollow">Description3</a></li>
            <li style="display: none;"><a href="http://site4.com" rel="nofollow">Description4</a></li>
            <li style="display: none;"><a href="http://site5.com" rel="nofollow">Description5</a></li>
            <li style="display: none;"><a href="http://site6.com" rel="nofollow">Description6</a></li>
            <li style="display: none;"><a href="http://site7.com" rel="nofollow">Description7</a></li>
            <li style="display: none;"><a href="http://site100.com" rel="nofollow">Description100</a></li>
            //Number of links is unlimited.
        </ul>
    </div>
    <ul class="pager">
      <li><a href="javascript:prevPage()" id="btn_prev">previous</a></li>
      <li><a href="javascript:nextPage()" id="btn_next">next</a></li>
    </ul>
</div>

我正在使用引导 css。 我不想使用 jquery。 我的代码几乎可以工作了。

 var current_page = 1;
    var records_per_page = 3;

    function prevPage()
    {
        if (current_page > 1) {
            current_page--;
            changePage(current_page);
        }
    }

    function nextPage()
    {
        if (current_page < numPages()) {
            current_page++;
            changePage(current_page);
        }
    }

    function changePage(page)
    {
        var btn_next = document.getElementById("btn_next");
        var btn_prev = document.getElementById("btn_prev");
        var listing_table = document.getElementById("listingTable");
        var page_span = document.getElementById("page");

        // Validate page
        if (page < 1) page = 1;
        if (page > numPages()) page = numPages();

var list = document.getElementById('linkbox'),items = list.childNodes;
    for (var i = (page-1) * records_per_page; i < (page * records_per_page) && i < childNodes.length; i++) {
        items[i].style.display = "block";
    }
        }
        page_span.innerHTML = page + "/" + numPages();

        if (page == 1) {
            btn_prev.style.visibility = "hidden";
        } else {
            btn_prev.style.visibility = "visible";
        }

        if (page == numPages()) {
            btn_next.style.visibility = "hidden";
        } else {
            btn_next.style.visibility = "visible";
        }
    }

    function numPages()
    {
        return Math.ceil(objJson.length / records_per_page);
    }

    window.onload = function() {
        changePage(1);
    };

但问题是var objJson = [] 我想将style="display: block;" 用于page1,并将style="display: none;" 用于其余链接。当页面改变时,样式也会改变。

更新:

我把我的链接直接放在&lt;ul&gt;里面我认为把它们放在java脚本中并只显示它们的一部分是不好的主意,区别是: 谷歌考虑&lt;ul&gt;&lt;/ul&gt; 中的所有链接,但是当我将它们放入javascript 时,只有page1 在&lt;ul&gt;&lt;/ul&gt; 中。 我应该通过以下方式获取所有链接:

var list = document.getElementById('Mylinks'),
    items = list.childNodes;

for (var i = 0, length = childNodes.length; i < length; i++)
{
    if (items[i].nodeType != 1) {
       continue;
    }
    items[i].style.display = "block"; 
}

并将第 1 页的样式更新为 style="display: block;"

【问题讨论】:

  • 您的链接 (&lt;li&gt;&lt;a href="http://site1.com" rel="nofollow"&gt;Description1&lt;/a&gt;&lt;/li&gt;) 是使用您的 objJson 动态创建的?
  • 动态但使用php,直接在&lt;ul class="paging"&gt;&lt;/ul&gt;内部我想我应该删除var objJson = []并更改内部代码。 @SteevePitis
  • Arf 我用 objJson 做了一些事情。尝试对 php 执行相同操作并删除我的 initPages

标签: javascript pagination


【解决方案1】:

如果我了解你想要什么,说&lt;ul&gt; 代表一页会更容易。

根据这个你可以做这样的事情:

var current_page = 1;
var records_per_page = 3;

var objJson = [
    { adName: "AdName 1"},
    { adName: "AdName 2"},
    { adName: "AdName 3"},
    { adName: "AdName 4"},
    { adName: "AdName 5"},
    { adName: "AdName 6"},
    { adName: "AdName 7"},
    { adName: "AdName 8"},
    { adName: "AdName 9"},
    { adName: "AdName 10"}
]; // Can be obtained from another source, such as your objJson variable

function prevPage()
{
    if (current_page > 1) {
        current_page--;
        changePage(current_page);
    }
}

function nextPage()
{
    if (current_page < numPages()) {
        current_page++;
        changePage(current_page);
    }
}

function changePage(page)
{
    var btn_next = document.getElementById("btn_next");
    var btn_prev = document.getElementById("btn_prev");
    var page_span = document.getElementById("page");

    // Validate page
    if (page < 1) page = 1;
    if (page > numPages()) page = numPages();

    if(document.querySelector('.current')) document.querySelector('.current').classList.remove('current');
    document.getElementById('page'+page).classList.add('current')
    
    page_span.innerHTML = page + "/" + numPages();

    if (page == 1) {
        btn_prev.style.visibility = "hidden";
    } else {
        btn_prev.style.visibility = "visible";
    }

    if (page == numPages()) {
        btn_next.style.visibility = "hidden";
    } else {
        btn_next.style.visibility = "visible";
    }
}

function numPages()
{
    return Math.ceil(objJson.length / records_per_page);
}

function initPages() {
  var ul;
  var container = document.getElementById("listingTable");
  for(var i = 0; i<objJson.length; i++) {
    if(i%records_per_page === 0){
      ul = document.createElement('ul');
      ul.className = "paging";
      ul.id = "page"+ ((i/records_per_page)+1);
      container.appendChild(ul);
    }
    
    var li = document.createElement('li');
    var a = document.createElement('a');
    a.href = '#';
    a.innerHTML = objJson[i].adName;
    li.appendChild(a);
    ul.appendChild(li);
  }
  changePage(1);
}

window.onload = function() {
    initPages();
    
};
.paging {
  display: none; 
}

.paging.current{
  display: block;
}
<div class="panel-body">
    <div id="listingTable">
    </div>
    <ul class="pager">
      <li><a href="javascript:prevPage()" id="btn_prev">قبلی</a></li>
      <li><a href="javascript:nextPage()" id="btn_next">بعدی</a></li>
    </ul>
</div>
<span id="page"></span>

【讨论】:

  • 感谢您的重播。但我想将我的链接直接放在 html 中。我不想将它们放在 javascript var objJson = [] google 中考虑
      中的链接,当我将它们放在 javascript 中时,只考虑其中的 html 部分。我要完全删除var objJson = [] 并使用var list = document.getElementById('list_name'), items = list.childNodes; for (var i = 0, length = childNodes.length; i &lt; length; i++) { if (items[i].nodeType != 1) { continue; } items[i].innerHTML = "&lt;a&gt;text&lt;/a&gt;"; } 来查找
    • 并且只显示第1 页
  • 然后使用您的 php ,您只需遵循我创建的 &lt;ul class='paging' id='page1'&gt;&lt;li ... /&gt;&lt;/ul&gt; 相同的结构,删除我的 initPages() 并且此代码将继续工作。
  • 请参阅更新后的问题! @Steeve Pitis
  • 你能检查一下为什么items[i].style.display = "block"; 不起作用吗?我重写了@Steeve Pitis 上面的所有代码
  • var items = document.querySelectorAll('#Mylinks li'); for (var i = 0, length = item.length; i &lt; length; i++) { items[i].style.display = "block"; } 试试这个
猜你喜欢
  • 1970-01-01
  • 2017-06-04
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多