var curPage = 1; //当前页 var pageSize = 20; //每页显示20条 var totalCount; //总条数 var total_page; //总页数 // 定义计算页码范围的函数 function calculatePageRange(n, totalCount) { n = n || 5; // 默认展示当前页前后5页 var prePage = curPage - 1; var leftm = Math.floor(prePage / n); var left = leftm * n + 1; var right = leftm * n + n > totalCount ? totalCount : leftm * n + n; right = totalCount = 0 ? 1 : right; var nextPage = curPage + 1; return { prePage, left, right, nextPage }; } $('.sp1 a').attr('href', 'javascript:;') $('.sp2 a').attr('href', 'javascript:;') var Initials = '' //字母 var jobTitle = '' //职称检索 var team = '' //系所检索 getList() // 点击 "职称检索"、"字母"、"系所检索" $('.sp2').on('click', 'a', function () { $(this).parent('.sp2').prev('.sp1').children('a').removeClass('on') $(this).siblings('a').removeClass('on') $(this).addClass('on') if ($(this).parents('li').index() == 0) { Initials = $(this).children('i').text().toUpperCase() } else if ($(this).parents('li').index() == 1) { jobTitle = $(this).text() } else if ($(this).parents('li').index() == 2) { team = $(this).text() } curPage = 1 getList() }) // 点击 "全部" $('.sp1 a').click(function () { $(this).parent('.sp1').next('.sp2').find('a').removeClass('on') $(this).addClass('on') if ($(this).parents('li').index() == 0) { Initials = '' } else if ($(this).parents('li').index() == 1) { jobTitle = '' } else if ($(this).parents('li').index() == 2) { team = '' } curPage = 1 getList() }) function getList() { $.ajax({ url: '../../common/jsjs.json', success: function (data) { var list = data.data; var newArr = [] var InitialsArr = [] jobTitleArr = [] teamArr = [] list.map(function (item, index, arr) { if (item.properties['字母检索'].toUpperCase().slice(0, 1) == Initials) { InitialsArr.push(item) } }) list.map(function (item, index, arr) { if (item.properties['职称检索'].includes(jobTitle) || jobTitle.split('/').indexOf(item.properties['职称检索']) != -1) { jobTitleArr.push(item) } }) list.map(function (item, index, arr) { if (item.properties['系所检索'].includes(team)) { teamArr.push(item) } }) let arr2 = [] if (Initials != '') { if (jobTitle != '') { if (team != '') { arr2 = [InitialsArr, jobTitleArr, teamArr] newArr = qjj(arr2) } else { arr2 = [InitialsArr, jobTitleArr] newArr = qjj(arr2) } } else { if (team != '') { arr2 = [InitialsArr, teamArr] newArr = qjj(arr2) } else { arr2 = [InitialsArr] newArr = qjj(arr2) } } } else { if (jobTitle != '') { if (team != '') { arr2 = [jobTitleArr, teamArr] newArr = qjj(arr2) } else { arr2 = [jobTitleArr] newArr = qjj(arr2) } } else { if (team != '') { arr2 = [teamArr] newArr = qjj(arr2) } else { newArr = list } } } // 按姓名排序 let newArr2 = newArr.sort((a, b) => a.title.localeCompare(b.title, 'zh')); // 分页开始 totalCount = newArr2.length //总条数 total_page = Math.ceil(totalCount / pageSize) //总页数 var html2 = '
' + curPage + '
' var pagehtml = '' // 生成页码部分的 HTML function generatePageNumbers(curPage, totalPage) { var { prePage, left, right, nextPage } = calculatePageRange(totalPage); var pageNumbers = ''; for (var i = left; i <= right; i++) { pageNumbers += `${i}`; } return pageNumbers; } // 生成通用的分页 HTML 结构 function generatePaginationHTML(totalCount, pageSize, curPage, totalPage, html2) { curPage = parseInt(curPage); var html = '
'; html += '共' + totalCount + '条'; html += '每页' + pageSize + ''; html += ' 首页 '; html += ' 上一页 '; html += '
'; html += '
'; html += generatePageNumbers(curPage, totalPage); html += ' 下一页 '; html += ' 末页 '; html += '
跳转 '; html += html2; html += ''; html += '
'; html += '
'; return html; } // 根据总页数生成对应的分页 HTML pagehtml = generatePaginationHTML(totalCount, pageSize, curPage, total_page, html2); $('.ser_b').html(pagehtml) // 分页结束 if (newArr2.length) { $('.gp-pagesOut').html(pagehtml) } else { $('.gp-pagesOut').html('') } getHtml(newArr2, curPage) // 分页跳转 $('.gp-page1').on('click', 'a', function () { if ($(this).parents('.selectDiv').length > 0) { curPage = $(this).text() getList() } else { if ($(this).hasClass('.gp-page-prev') && curPage == 1 || $(this).hasClass('.gp-page-start') && curPage == 1) { return false // getList() } else if ($(this).hasClass('.gp-page-next') && curPage == total_page || $(this).hasClass('.gp-page-end') && curPage == total_page) { return false // getList() } else { $(this).siblings('a').removeClass('on_pages') $(this).addClass('on_pages') curPage = $(this).attr('page') getList() } } console.log(curPage) }) $('.gp-page1').on('mouseenter', '.selectDiv', function () { $('.selectDiv ul').addClass('on') }) $('.gp-page1').on('mouseleave', '.selectDiv', function () { $('.selectDiv ul').removeClass('on') }) } }) } // 数据追加到页面 function getHtml(newArr, curPage) { var newArr2 = [] newArr2 = newArr.slice((parseInt(curPage) - 1) * pageSize, curPage * pageSize) var html = '' $.each(newArr2, function (i, item) { html += '
  • ' + '' + '
    ' + '' + '
    ' + '
    ' + item.title + '
    ' + '

    ' + item.viceTitle.trim() + '

    ' + '
    ' + '
  • ' }) $('.gp-teacher5 ul').html(html) } // 取多个数组交集 // 1、设置一个变量minArr,表示所有数据里最小长度的数组 // 后面通过这个最小长度数组的数据和其他的数据比较取交集的数据 function qjj(arr) { let minArr = [], defaultArr = []; arr.forEach(i => { minArr = i; if (i.length < minArr.length) { minArr = i; } }); minArr.forEach(i => { state = []; // 2、这里因为要知道arr每个数组里是否包含的minArr当前循环的值i, // 所有设置了一个状态的数组state=[], // arr里的数组j如果包含i就往state里面push一个true,否则push一个false arr.forEach(j => { if (j.includes(i)) { state.push(true); } else state.push(false); }); // 3、最后一步通过对state状态数组对比每一个值是不是都是true // 来判断是否把这个i存进defaultArr交集的数组里 const status = state.every(i => { return i === true; }); // 只有arr所有的数组都包含这个值才存进defaultArr里 status && !defaultArr.includes(i) && defaultArr.push(i); }); return defaultArr }