日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

新版小爱课程表正方教务系统课表适配

發(fā)布時間:2023/12/20 windows 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 新版小爱课程表正方教务系统课表适配 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

新版小愛課程表正方教務(wù)系統(tǒng)課表適配

前言

之前寫過一篇小愛課程表的教務(wù)系統(tǒng)適配,但是是比較老的版本開發(fā)者工具適配了,最近看到小愛課程表開發(fā)者工具更新了,就想著寫一篇新的博客,順便優(yōu)化一下之前的代碼,還提供了部分課程實例的一些解析代碼

1.安裝小愛課程表開發(fā)者工具

其實安裝這部分并不屬于本篇文章的內(nèi)容,但是鑒于新版開發(fā)者工具提供了更全面的文檔信息,所以把文檔鏈接放在前面,方便讀者去安裝下載開發(fā)者工具:
https://open-schedule-prod.ai.xiaomi.com/docs/#/help/

2.文檔分析

安裝好以后,我們打開文檔,閱讀一下導(dǎo)入課表需要的代碼

我們知道,導(dǎo)入課表的代碼分為了3個文件以及他們的作用
于是我們按順序分別開始編輯代碼

(1)provider.js

第一個代碼是提供必要的html,也就是拿到網(wǎng)頁的html后直接return即可,所以我們分析網(wǎng)頁內(nèi)必要的代碼部分
我們可以看到,正方教務(wù)系統(tǒng)的功能區(qū)域代碼是基于iframe的,因此我們必要的功能區(qū)域代碼也就是id=”iframeautoheight“的部分,所以provider.js代碼如下:

function scheduleHtmlProvider(iframeContent = "", frameContent = "", dom = document) {return dom.querySelector('#iframeautoheight').contentWindow.document.body.innerHTML; }

(2)parser.js

第二個代碼的功能是返回具體課程內(nèi)容的,所以對第一個代碼返回過來的html文件進(jìn)行解析最后生成對應(yīng)格式返回即可。
下面我們對課表網(wǎng)頁進(jìn)行分析,課表是用table進(jìn)行展示的:
下面我們的思路就是對table進(jìn)行遍歷。通過閱讀文檔,我們知道,parser是提供了Cheerio的,所以我們使用其去解析網(wǎng)頁代碼:

var jsonArray = [];function scheduleHtmlParser(html) {var $ = cheerio.load(html, { decodeEntities: false });$("#Table6 tr").each(function (i) {if (i > 1) {$(this).children('td').each(function (j) {if ((i - 1) == 3 || (i - 1) == 7) {if (j > 0) {console.log("第"+(i-1)+"節(jié)課,周"+(j)+"課程信息:"+$(this).html());}} else if ((i - 1) == 1 || (i - 1) == 5 || (i - 1) == 9) {if ((j - 1) > 0) {console.log("第"+(i-1)+"節(jié)課,周"+(j-1)+"課程信息:"+$(this).html());}}})}})return jsonArray; }

好了,課表解析出來之后,接下來我們測試一下:

輸出結(jié)果沒有問題,下面我們分析課程信息。不難看出,每個課程均為4行,分別是課程名、上課周次、教師姓名、上課地點,之間分別有<br>進(jìn)行分割,如果為多個課程,后面會有<br><br><br>對不同課程進(jìn)行分割,所以我們只需要通過split()函數(shù)對課程信息字符串進(jìn)行分割即可,所以代碼如下:

/**得到單科課程信息(班級課表) */ function getClass(classHtml, day, section) {var classA = [];var classs = classHtml.split('<br><br><br>');if (classs.length >= 1) { //防止空課表for (var i = 0; i < classs.length; i++) { //遍歷所有課程if (classs[i].indexOf("<br>") != -1) { //判斷課程信息是否可以正常分割var classObj = {};var classsObj = classs[i].split("<br>"); //對課程進(jìn)行分割classObj.name = classsObj[0];classObj.position = classsObj[3];classObj.teacher = classsObj[2];classObj.weeks = [].concat(getWeeks(classsObj[1]));classObj.day = day;classObj.sections = [];classObj.sections.push(section);classObj.sections.push(section + 1);classA.push(classObj);}}}return classA; }/**周次解析(班級課表) */ function getWeeks(weeksHtml) {var weeksStr = weeksHtml;var weeksA = [];if (weeksStr) {var weekArr = weeksStr.split(',')if (weekArr.length > 2) { //不正常周次for (var j = 0; j < weekArr.length - 1; j++) { //循環(huán)所有周次區(qū)間if (weekArr[j].indexOf("單") != -1) { //單周if (weekArr[j]) {var weeksA1 = weekArr[j].split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i = i + 2) {weeksA.push(i);}}}else if (weekArr[j].indexOf("雙") != -1) { //雙周if (weekArr[j]) {var weeksA1 = weekArr[j].split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i = i + 2) {weeksA.push(i);}}} else {if (weekArr[j].indexOf("-") != -1) { //帶有-符號的周次if (weekArr[j]) {var weeksA1 = weekArr[j].split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i++) {weeksA.push(parseInt(i))}}} else {//不帶有-符號的周次weeksA.push(parseInt(weekArr[j]))}}}} else { //正常周次if (weeksStr.indexOf('單') != -1) {if (weeksHtml) {var weeksA1 = weeksHtml.split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i = i + 2) {weeksA.push(i);}}} else if (weeksStr.indexOf('雙') != -1) {if (weeksHtml) {var weeksA1 = weeksHtml.split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i = i + 2) {weeksA.push(i);}}} else {if (weeksStr.indexOf("-") != -1) { //帶有-符號的周次if (weeksHtml) {var weeksA1 = weeksHtml.split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i++) {weeksA.push(parseInt(i))}}} else {//不帶有-符號的周次weeksA.push(parseInt(weekArr[0]))}}}}return weeksA; }

代碼可能有點多,但都是很基礎(chǔ)的判斷和split()的運用,周次解析沒有簡單的只解析1-18(1,2)這種格式,包括1-2,3-8單,9,10-14雙,15-18(1,2)這種復(fù)雜的周次結(jié)構(gòu)也可以解析

所以,上面的代碼拼到一起,就可以得到我們的課程解析的parser.js代碼:

var jsonArray = [];function scheduleHtmlParser(html) {var $ = cheerio.load(html, { decodeEntities: false });$("#Table6 tr").each(function (i) {if (i > 1) {$(this).children('td').each(function (j) {if ((i - 1) == 3 || (i - 1) == 7) {if (j > 0) {var classA = [].concat(getClass($(this).html(), j, (i - 1)));for (var k = 0; k < classA.length; k++) {jsonArray.push(classA[k]);}}} else if ((i - 1) == 1 || (i - 1) == 5 || (i - 1) == 9) {if ((j - 1) > 0) {var classA = [].concat(getClass($(this).html(), (j - 1), (i - 1)));for (var k = 0; k < classA.length; k++) {jsonArray.push(classA[k]);}}}})}})return jsonArray; }/**得到單科課程信息(班級課表) */ function getClass(classHtml, day, section) {var classA = [];var classs = classHtml.split('<br><br><br>');if (classs.length >= 1) { //防止空課表for (var i = 0; i < classs.length; i++) { //遍歷所有課程if (classs[i].indexOf("<br>") != -1) { //判斷課程信息是否可以正常分割var classObj = {};var classsObj = classs[i].split("<br>"); //對課程進(jìn)行分割classObj.name = classsObj[0];classObj.position = classsObj[3];classObj.teacher = classsObj[2];classObj.weeks = [].concat(getWeeks(classsObj[1]));classObj.day = day;classObj.sections = [];classObj.sections.push(section);classObj.sections.push(section + 1);classA.push(classObj);}}}return classA; }/**周次解析(班級課表) */ function getWeeks(weeksHtml) {var weeksStr = weeksHtml;var weeksA = [];if (weeksStr) {var weekArr = weeksStr.split(',')if (weekArr.length > 2) { //不正常周次for (var j = 0; j < weekArr.length - 1; j++) { //循環(huán)所有周次區(qū)間if (weekArr[j].indexOf("單") != -1) { //單周if (weekArr[j]) {var weeksA1 = weekArr[j].split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i = i + 2) {weeksA.push(i);}}}else if (weekArr[j].indexOf("雙") != -1) { //雙周if (weekArr[j]) {var weeksA1 = weekArr[j].split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i = i + 2) {weeksA.push(i);}}} else {if (weekArr[j].indexOf("-") != -1) { //帶有-符號的周次if (weekArr[j]) {var weeksA1 = weekArr[j].split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i++) {weeksA.push(parseInt(i))}}} else {//不帶有-符號的周次weeksA.push(parseInt(weekArr[j]))}}}} else { //正常周次if (weeksStr.indexOf('單') != -1) {if (weeksHtml) {var weeksA1 = weeksHtml.split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i = i + 2) {weeksA.push(i);}}} else if (weeksStr.indexOf('雙') != -1) {if (weeksHtml) {var weeksA1 = weeksHtml.split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i = i + 2) {weeksA.push(i);}}} else {if (weeksStr.indexOf("-") != -1) { //帶有-符號的周次if (weeksHtml) {var weeksA1 = weeksHtml.split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i++) {weeksA.push(parseInt(i))}}} else {//不帶有-符號的周次weeksA.push(parseInt(weekArr[0]))}}}}return weeksA; }

(4)timer.js

這個代碼就很好理解了,用來設(shè)置課程的時間,總周次的一些信息,所以我們照著文檔提供的代碼修改即可(開學(xué)時間為空即可):

/*** 時間配置函數(shù),此為入口函數(shù),不要改動函數(shù)名*/async function scheduleTimer({providerRes,parserRes } = {}) {return {totalWeek: 20, // 總周數(shù):[1, 30]之間的整數(shù)startSemester: '', // 開學(xué)時間:時間戳,13位長度字符串,推薦用代碼生成startWithSunday: false, // 是否是周日為起始日,該選項為true時,會開啟顯示周末選項showWeekend: true, // 是否顯示周末forenoon: 4, // 上午課程節(jié)數(shù):[1, 10]之間的整數(shù)afternoon: 4, // 下午課程節(jié)數(shù):[0, 10]之間的整數(shù)night: 2, // 晚間課程節(jié)數(shù):[0, 10]之間的整數(shù)sections: [{ section: 1, startTime: "08:00", endTime: "08:50" },{ section: 2, startTime: "09:00", endTime: "9:50" },{ section: 3, startTime: "10:10", endTime: "11:00" },{ section: 4, startTime: "11:10", endTime: "12:00" },{ section: 5, startTime: "14:30", endTime: "15:20" },{ section: 6, startTime: "15:30", endTime: "16:20" },{ section: 7, startTime: "16:30", endTime: "17:20" },{ section: 8, startTime: "17:30", endTime: "18:20" },{ section: 9, startTime: "19:30", endTime: "20:20" },{ section: 10, startTime: "20:20", endTime: "21:30" }], // 課程時間表,注意:總長度要和上邊配置的節(jié)數(shù)加和對齊}// PS: 夏令時什么的還是讓用戶在夏令時的時候重新導(dǎo)入一遍吧,在這個函數(shù)里邊適配吧!奧里給!————不愿意透露姓名的嚶某人 }

4.補充代碼

上面我們實現(xiàn)的代碼已經(jīng)可以滿足正常課表的解析了,這部分主要是提供一些不正常的課程信息的解析方法,最后貼上對應(yīng)的parser.js的代碼。

(1)專修課


如果出現(xiàn)這種專修科,因為周次一致的緣由,所以筆者的方案是將課程拼接起來

所以我們的課程解析的代碼為:

/**得到單科課程信息(班級課表) */ function getClass(classHtml, day, section) {var classA = [];var classs = classHtml.split('<br><br><br>');if (classs.length >= 1) { //防止空課表for (var i = 0; i < classs.length; i++) { //遍歷所有課程if (classs[i].indexOf("<br>") != -1) { //判斷課程信息是否正常var classObj = {};var classsObj = classs[i].split("<br>"); //對課程進(jìn)行分割if (classs[1] && classs[1] != "" && classs[1] != undefined) { //如果存在index為1的索引if (classs[1] && classs[1] != "" && classs[0].split("<br>")[1] != classs[1].split("<br>")[1]) { //如果當(dāng)前課程前兩節(jié)小課時間不相同,則是單雙周課,而不是專修課classObj.name = classsObj[0];classObj.position = classsObj[3];classObj.teacher = classsObj[2];classObj.weeks = [].concat(getWeeks(classsObj[1]));classObj.day = day;classObj.sections = [];classObj.sections.push(section);classObj.sections.push(section + 1);classA.push(classObj);} else { //如果當(dāng)前課程前兩節(jié)小課時間不相同,則不是單雙周課,而是專修課if (i == 0) { //第一次添加值classObj.name = classsObj[0];classObj.position = classsObj[3];classObj.teacher = classsObj[2];classObj.weeks = [].concat(getWeeks(classsObj[1]));classObj.day = day;classObj.sections = [];classObj.sections.push(section);classObj.sections.push(section + 1);classA.push(classObj);} else if (i == classs.length - 1) { //最后一次添加值classA[classA.length - 1].name = classA[classA.length - 1].name + "," + classsObj[0];classA[classA.length - 1].position = classA[classA.length - 1].position + "," + classsObj[3];classA[classA.length - 1].teacher = classA[classA.length - 1].teacher + "," + classsObj[2];} else { //正常添加值classA[classA.length - 1].name = classA[classA.length - 1].name + "," + classsObj[0];classA[classA.length - 1].position = classA[classA.length - 1].position + "," + classsObj[3];classA[classA.length - 1].teacher = classA[classA.length - 1].teacher + "," + classsObj[2];}}} else {//如果不存在,則為單個課程classObj.name = classsObj[0];classObj.position = classsObj[3];classObj.teacher = classsObj[2];classObj.weeks = [].concat(getWeeks(classsObj[1]));classObj.day = day;classObj.sections = [];classObj.sections.push(section);classObj.sections.push(section + 1);classA.push(classObj);}}}}return classA; }

(2)學(xué)生個人課表

筆者學(xué)校教務(wù)系統(tǒng)提供了班級課表和學(xué)生個人課表兩種課表查詢功能,上面我們僅僅做了班級課表的解析,如果上線到教務(wù)系統(tǒng)適配中,同學(xué)使用個人課表解析就會出現(xiàn)問題了,所以我們用相同的方法對個人課表進(jìn)行解析,具體的分析方法同上,這里提供一份完整的解析代碼,讀者可以根據(jù)班級課表的解析代碼舉一反三去學(xué)習(xí)了解一下個人課表的解析代碼:
parser.js

var jsonArray = [];function scheduleHtmlParser(html) {var $ = cheerio.load(html, { decodeEntities: false });if ($("#Table6").length > 0) {//班級課表查詢界面適配$("#Table6 tr").each(function (i) {if (i > 1) {$(this).children('td').each(function (j) {if ((i - 1) == 3 || (i - 1) == 7) {if (j > 0) {var classA = [].concat(getClass($(this).html(), j, (i - 1)));for (var k = 0; k < classA.length; k++) {jsonArray.push(classA[k]);}// console.log("第"+(i-1)+"節(jié)課,周"+(j)+"課程名稱:"+$(this).html());}} else if ((i - 1) == 1 || (i - 1) == 5 || (i - 1) == 9) {if ((j - 1) > 0) {var classA = [].concat(getClass($(this).html(), (j - 1), (i - 1)));for (var k = 0; k < classA.length; k++) {jsonArray.push(classA[k]);}// console.log("第"+(i-1)+"節(jié)課,周"+(j-1)+"課程名稱:"+$(this).html());}}})}})}else {//個人課表查詢界面適配$("#Table1 tr").each(function (i) {if (i > 1) {$(this).children('td').each(function (j) {if ((i - 1) == 3 || (i - 1) == 7) {if (j > 0) {var classA = [].concat(getClassUser($(this).html(), j, (i - 1)));if (classA.length === 1) {jsonArray.push(classA[0]);} else if (classA.length === 2) {jsonArray.push(classA[0]);jsonArray.push(classA[1]);}// console.log("第"+(i-1)+"節(jié)課,周"+(j)+"課程名稱:"+$(this).html());}} else if ((i - 1) == 1 || (i - 1) == 5 || (i - 1) == 9) {if ((j - 1) > 0) {var classA = [].concat(getClassUser($(this).html(), (j - 1), (i - 1)));if (classA.length === 1) {jsonArray.push(classA[0]);} else if (classA.length === 2) {jsonArray.push(classA[0]);jsonArray.push(classA[1]);}// console.log("第"+(i-1)+"節(jié)課,周"+(j-1)+"課程名稱:"+$(this).html());}}})}})}return jsonArray; }/**得到單科課程信息(班級課表) */ function getClass(classHtml, day, section) {var classA = [];var classs = classHtml.split('<br><br><br>');if (classs.length >= 1) { //防止空課表for (var i = 0; i < classs.length; i++) { //遍歷所有課程if (classs[i].indexOf("<br>") != -1) { //判斷課程信息是否正常var classObj = {};var classsObj = classs[i].split("<br>"); //對課程進(jìn)行分割if (classs[1] && classs[1] != "" && classs[1] != undefined) { //如果存在index為1的索引if (classs[1] && classs[1] != "" && classs[0].split("<br>")[1] != classs[1].split("<br>")[1]) { //如果當(dāng)前課程前兩節(jié)小課時間不相同,則是單雙周課,而不是專修課classObj.name = classsObj[0];classObj.position = classsObj[3];classObj.teacher = classsObj[2];classObj.weeks = [].concat(getWeeks(classsObj[1]));classObj.day = day;classObj.sections = [];classObj.sections.push(section);classObj.sections.push(section + 1);classA.push(classObj);} else { //如果當(dāng)前課程前兩節(jié)小課時間不相同,則不是單雙周課,而是專修課if (i == 0) { //第一次添加值classObj.name = classsObj[0];classObj.position = classsObj[3];classObj.teacher = classsObj[2];classObj.weeks = [].concat(getWeeks(classsObj[1]));classObj.day = day;classObj.sections = [];classObj.sections.push(section);classObj.sections.push(section + 1);classA.push(classObj);} else if (i == classs.length - 1) { //最后一次添加值classA[classA.length - 1].name = classA[classA.length - 1].name + "," + classsObj[0];classA[classA.length - 1].position = classA[classA.length - 1].position + "," + classsObj[3];classA[classA.length - 1].teacher = classA[classA.length - 1].teacher + "," + classsObj[2];} else { //正常添加值classA[classA.length - 1].name = classA[classA.length - 1].name + "," + classsObj[0];classA[classA.length - 1].position = classA[classA.length - 1].position + "," + classsObj[3];classA[classA.length - 1].teacher = classA[classA.length - 1].teacher + "," + classsObj[2];}}} else {//如果不存在,則為單個課程classObj.name = classsObj[0];classObj.position = classsObj[3];classObj.teacher = classsObj[2];classObj.weeks = [].concat(getWeeks(classsObj[1]));classObj.day = day;classObj.sections = [];classObj.sections.push(section);classObj.sections.push(section + 1);classA.push(classObj);}}}}return classA; }/**周次解析(班級課表) */ function getWeeks(weeksHtml) {var weeksStr = weeksHtml;var weeksA = [];if (weeksStr) {var weekArr = weeksStr.split(',')if (weekArr.length > 2) { //不正常周次for (var j = 0; j < weekArr.length - 1; j++) { //循環(huán)所有周次區(qū)間if (weekArr[j].indexOf("單") != -1) { //單周if (weekArr[j]) {var weeksA1 = weekArr[j].split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i = i + 2) {weeksA.push(i);}}}else if (weekArr[j].indexOf("雙") != -1) { //雙周if (weekArr[j]) {var weeksA1 = weekArr[j].split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i = i + 2) {weeksA.push(i);}}} else {if (weekArr[j].indexOf("-") != -1) { //帶有-符號的周次if (weekArr[j]) {var weeksA1 = weekArr[j].split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i++) {weeksA.push(parseInt(i))}}} else {//不帶有-符號的周次weeksA.push(parseInt(weekArr[j]))}}}} else { //正常周次if (weeksStr.indexOf('單') != -1) {if (weeksHtml) {var weeksA1 = weeksHtml.split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i = i + 2) {weeksA.push(i);}}} else if (weeksStr.indexOf('雙') != -1) {if (weeksHtml) {var weeksA1 = weeksHtml.split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i = i + 2) {weeksA.push(i);}}} else {if (weeksStr.indexOf("-") != -1) { //帶有-符號的周次if (weeksHtml) {var weeksA1 = weeksHtml.split('-');for (var i = parseInt(weeksA1[0]); i <= parseInt(weeksA1[1]); i++) {weeksA.push(parseInt(i))}}} else {//不帶有-符號的周次weeksA.push(parseInt(weekArr[0]))}}}}return weeksA; }/**得到單科課程信息(個人課表) */ function getClassUser(classHtml, day, section) {var classA = [];var classs = classHtml.split('<br>');if (classs.length > 1) {//防止空課程if (classs.length <= 6) {//當(dāng)課程為標(biāo)準(zhǔn)課程var classObj = {};classObj.name = classs[0];classObj.position = classs[3];classObj.teacher = classs[2];classObj.weeks = [].concat(getWeeksUser(classs[1]));classObj.day = day;classObj.sections = [];classObj.sections.push(section);classObj.sections.push(section + 1);classA.push(classObj);} else {//當(dāng)課程為雙課程//第一節(jié)課var classObj = {};classObj.name = classs[0];classObj.position = classs[3];classObj.teacher = classs[2];classObj.weeks = [].concat(getWeeksUser(classs[1]));classObj.day = day;classObj.sections = [];classObj.sections.push(section);classA.push(classObj);//第二節(jié)課if (classs[5].indexOf('調(diào)') != -1) {var classObj1 = {};classObj1.name = classs[7];classObj1.position = classs[10];classObj1.teacher = classs[9];classObj1.weeks = [].concat(getWeeksUser(classs[8]));classObj1.day = day;classObj1.sections = [];classObj1.sections.push(section + 1);classA.push(classObj1);} else {var classObj1 = {};classObj1.name = classs[5];classObj1.position = classs[8];classObj1.teacher = classs[7];classObj1.weeks = [].concat(getWeeksUser(classs[6]));classObj1.day = day;classObj1.sections = [];classObj1.sections.push(section + 1);classA.push(classObj1);}}}return classA; }/**周次解析(個人課表) */ function getWeeksUser(weeksHtml) {var weeksStr = weeksHtml;var weeksA = [];if (weeksStr.indexOf('-') != -1) {var weeksA1 = weeksHtml.split('-');var start = 0;var end = 0;if (weeksA1[0][weeksA1[0].length - 2] != '第') {start = parseInt(weeksA1[0][weeksA1[0].length - 2] + weeksA1[0][weeksA1[0].length - 1])} else {start = parseInt(weeksA1[0][weeksA1[0].length - 1])}if (weeksA1[1][1] != '周') {end = parseInt(weeksA1[1][0] + weeksA1[1][1])} else {end = parseInt(weeksA1[1][0])}if (weeksStr.indexOf('單') != -1) {for (var i = start; i <= end; i = i + 2) {weeksA.push(i);}} else if (weeksStr.indexOf('雙') != -1) {for (var i = start; i <= end; i = i + 2) {weeksA.push(i);}} else {for (var i = start; i <= end; i++) {weeksA.push(parseInt(i))}}}return weeksA; }

(3)多周循環(huán)課程

第三種是筆者在給其他學(xué)校做課程信息適配時候遇到的一種情況

該課程上課方式為,總周次18周,6周為一循環(huán),每周上課教室不同,所以下面僅提供該種情況的解析代碼

/**得到單科課程信息(班級課表) */ function getClass(classHtml, day, section) {var classA = [];if (classHtml) {var classs = classHtml.split('<br><br><br>');if (classs[0] != "&nbsp;") {//防止空課程if (classHtml.indexOf("/周") != -1) {//如果是特殊的周次for (var j = 0; j < (18 / classs.length); j++) { //對周次進(jìn)行循環(huán)for (var i = 0; i < classs.length; i++) {//遍歷所有課程if (classs[i]) {var classsObj = classs[i].split("<br>");var classObj = {};classObj.name = classsObj[0];classObj.position = classsObj[3];classObj.teacher = classsObj[2];var weeksA2 = [];var numWeek = ((i + 1) + (classs.length * j));weeksA2.push(numWeek);classObj.weeks = weeksA2;classObj.day = day;classObj.sections = [];classObj.sections.push(section);classObj.sections.push(section + 1);classA.push(classObj);}}}} else {//正常周次for (var i = 0; i < classs.length; i++) {//遍歷所有課程if (classs[i]) {var classsObj = classs[i].split("<br>");var classObj = {};classObj.name = classsObj[0];classObj.position = classsObj[3];classObj.teacher = classsObj[2];classObj.weeks = [].concat(getWeeks(classsObj[1]));classObj.day = day;classObj.sections = [];classObj.sections.push(section);classObj.sections.push(section + 1);classA.push(classObj);}}}}}return classA; }

結(jié)尾

到這里文章就算完成了,如果有不懂的地方可以直接聯(lián)系我咨詢,最后附上審核通過的截圖:

總結(jié)

以上是生活随笔為你收集整理的新版小爱课程表正方教务系统课表适配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。