c语言编程笔录

首页 >   > 笔记大全

笔记大全

Xml javascript分页

更新时间:2024-01-03

前言

在当今Web前端技术中,数据的分页显示是一个非常常见且必要的功能。因为当大量数据需要在页面中显示的时候,直接把数据全部展示出来会对用户体验产生非常不好的影响,因此我们需要对数据进行分页展示。而XML是一种非常常见的数据格式,而JavaScript是前端开发必须的语言,因此在本篇文章中,我们将介绍如何用JavaScript实现XML数据的分页展示。

第一部分:准备工作

在开始之前,我们需要准备好一些必要的工作。首先我们需要准备一个XML文件,这个文件中包含我们需要展示的数据。假设我们已经准备好了名为"data.xml"的XML文件,内容如下:

        <?xml version="1.0" encoding="UTF-8"?>
        <data>
            <record>
                <name>张三</name>
                <age>20</age>
                <sex>男</sex>
            </record>
            <record>
                <name>李四</name>
                <age>22</age>
                <sex>男</sex>
            </record>
            ...
            <record>
                <name>赵六</name>
                <age>21</age>
                <sex>女</sex>
            </record>
        </data>
    

然后我们需要编写HTML/CSS结构,以及JavaScript代码用来动态加载数据并进行分页。以下为我们预先编写好的HTML/CSS代码:

        <!-- HTML结构 -->
        <div class="content">
            <ul class="data_list">
            </ul>
            <div class="page_list">
                <ul>
                </ul>
            </div>
        </div>

        /* CSS样式 */
        .data_list{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        .data_list li{
            padding: 10px;
            border-bottom: 1px solid #ccc;
        }
        .page_list{
            margin-top: 10px;
            text-align: center;
        }
        .page_list li{
            display: inline-block;
            padding: 5px 10px;
            margin-right: 5px;
            border: 1px solid #ccc;
            cursor: pointer;
        }
        .page_list li.active{
            background-color: #333;
            color: #fff;
            border-color: #333;
        }
    

第二部分:编写JavaScript代码

当我们准备好了XML文件以及HTML/CSS结构之后,我们需要编写JavaScript代码来动态加载XML数据并进行分页。首先我们需要编写一个函数用来加载XML数据:

        function loadXMLDoc(filename){
            if (window.XMLHttpRequest){
                xhttp=new XMLHttpRequest();
            }
            else{
                xhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xhttp.open("GET",filename,false);
            xhttp.send();
            return xhttp.responseXML;
        }
    

上述代码中,我们使用XMLHttpRequest对象来实现XML数据的异步加载并返回数据。然后我们需要编写一个函数用来初始化页面以及分页的数据:

        var xmlData = loadXMLDoc("data.xml");
        var dataNodes = xmlData.getElementsByTagName("record");
        var dataPageSize = 5;
        var pageCount = Math.ceil(dataNodes.length/dataPageSize);
        var curPageIndex = 1;
        var pageList = document.querySelector('.page_list ul');
        var dataList = document.querySelector('.data_list');

        function initPageList(){
            for(var i = 1; i <= pageCount; i++){
                var liNode = document.createElement('li');
                liNode.innerHTML = i;
                if(i === curPageIndex) {
                    liNode.classList.add('active');
                }
                pageList.appendChild(liNode);
            }
        }

        function bindEvent(){
            pageList.addEventListener('click', function(e){
                var target = e.target;
                if(target.tagName.toLocaleLowerCase() === 'li') {
                    var pageIndex = parseInt(target.innerHTML);
                    curPageIndex = pageIndex;
                    renderData();
                }
            });
        }

        function renderData(){
            var start = (curPageIndex - 1) * dataPageSize;
            var end = Math.min(start + dataPageSize, dataNodes.length);
            var html = '';
            for(var i = start; i < end; i++) {
                var record = dataNodes[i];
                var name = record.getElementsByTagName('name')[0].childNodes[0].nodeValue;
                var age = record.getElementsByTagName('age')[0].childNodes[0].nodeValue;
                var sex = record.getElementsByTagName('sex')[0].childNodes[0].nodeValue;
                html += '<li><span>姓名:' + name + '</span><span>年龄:' + age + '</span><span>性别:' + sex + '</span></li>';
            }
            dataList.innerHTML = html;
            var pageItems = pageList.querySelectorAll('li');
            for(var i = 0; i < pageItems.length; i++) {
                if(i === curPageIndex - 1) {
                    pageItems[i].classList.add('active');
                } else {
                    pageItems[i].classList.remove('active');
                }
            }
        }

        initPageList();
        bindEvent();
        renderData();
    

上述JavaScript代码中,我们定义了一个分页大小(dataPageSize),用于计算当前页面提取数据的起始和结束位置。我们还定义了当前页码(curPageIndex)、总页码(pageCount),以及数据节点(dataNodes)等变量。

第三部分:加载数据并进行分页

当我们完成了JavaScript代码编写之后,我们需要将HTML/CSS文件与JavaScript文件整合到一起,并在浏览器中运行展示效果。以下是最终的完整代码:

        <!-- HTML结构 -->
        <div class="content">
            <ul class="data_list">
            </ul>
            <div class="page_list">
                <ul>
                </ul>
            </div>
        </div>

        /* CSS样式 */
        .data_list{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        .data_list li{
            padding: 10px;
            border-bottom: 1px solid #ccc;
        }
        .page_list{
            margin-top: 10px;
            text-align: center;
        }
        .page_list li{
            display: inline-block;
            padding: 5px 10px;
            margin-right: 5px;
            border: 1px solid #ccc;
            cursor: pointer;
        }
        .page_list li.active{
            background-color: #333;
            color: #fff;
            border-color: #333;
        }

        <!-- JavaScript实现 -->
        <script>
            function loadXMLDoc(filename){
                if (window.XMLHttpRequest){
                    xhttp=new XMLHttpRequest();
                }
                else{
                    xhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
                xhttp.open("GET",filename,false);
                xhttp.send();
                return xhttp.responseXML;
            }

            var xmlData = loadXMLDoc("data.xml");
            var dataNodes = xmlData.getElementsByTagName("record");
            var dataPageSize = 5;
            var pageCount = Math.ceil(dataNodes.length/dataPageSize);
            var curPageIndex = 1;
            var pageList = document.querySelector('.page_list ul');
            var dataList = document.querySelector('.data_list');

            function initPageList(){
                for(var i = 1; i <= pageCount; i++){
                    var liNode = document.createElement('li');
                    liNode.innerHTML = i;
                    if(i === curPageIndex) {
                        liNode.classList.add('active');
                    }
                    pageList.appendChild(liNode);
                }
            }

            function bindEvent(){
                pageList.addEventListener('click', function(e){
                    var target = e.target;
                    if(target.tagName.toLocaleLowerCase() === 'li') {
                        var pageIndex = parseInt(target.innerHTML);
                        curPageIndex = pageIndex;
                        renderData();
                    }
                });
            }

            function renderData(){
                var start = (curPageIndex - 1) * dataPageSize;
                var end = Math.min(start + dataPageSize, dataNodes.length);
                var html = '';
                for(var i = start; i < end; i++) {
                    var record = dataNodes[i];
                    var name = record.getElementsByTagName('name')[0].childNodes[0].nodeValue;
                    var age = record.getElementsByTagName('age')[0].childNodes[0].nodeValue;
                    var sex = record.getElementsByTagName('sex')[0].childNodes[0].nodeValue;
                    html += '<li><span>姓名:' + name + '</span><span>年龄:' + age + '</span><span>性别:' + sex + '</span></li>';
                }
                dataList.innerHTML = html;
                var pageItems = pageList.querySelectorAll('li');
                for(var i = 0; i < pageItems.length; i++) {
                    if(i === curPageIndex - 1) {
                        pageItems[i].classList.add('active');
                    } else {
                        pageItems[i].classList.remove('active');
                    }
                }
            }

            initPageList();
            bindEvent();
            renderData();
        </script>
    

第四部分:总结

在本篇文章中,我们介绍了如何用JavaScript实现XML数据的分页展示。我们使用了XMLHttpRequest对象来实现XML数据的异步加载,并通过DOM解析XML数据,并将数据分页展示在页面中。此外,我们还介绍了如何在页面中动态生成分页器,并通过事件委托绑定事件,实现了分页器的分页功能。通过以上实现,我们可以在前端页面中展示超大量的数据,并实现方便快捷的数据分页展示功能。这样既可以充分利用页面空间,同时又保证了良好的用户体验。