tasklib_book.js 77 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681
  1. //播放音频图片地址
  2. var PicInfo1 = {
  3. answerPointImgUrl: "file:///android_asset/js/update-answer.png",
  4. yaoshiShowImgUrl: "file:///android_asset/js/yaoshi-show.png",
  5. yaoshiHideImgUrl: "file:///android_asset/js/yaoshi-hide.png",
  6. recordPlayImgUrl: "file:///android_asset/js/play.png",
  7. recordPauseImgUrl: "file:///android_asset/js/pause.png",
  8. audioPlayImgUrl: "file:///android_asset/js/dynaiselaba.gif",
  9. audioPauseImgUrl: "file:///android_asset/js/dynaiselaba.png"
  10. }
  11. //本地调用用的资源
  12. var PicInfo = {
  13. answerPointImgUrl: "../Images/update-answer.png",
  14. yaoshiShowImgUrl: "../Images/yaoshi-show.png",
  15. yaoshiHideImgUrl: "../Images/yaoshi-hide.png",
  16. KouYuTagImgUrl: "../Images/KY.png",
  17. recordPlayImgUrl: "../Images/play.png",
  18. recordPauseImgUrl: "../Images/pause.png",
  19. audioPlayImgUrl: "../Images/dynaiselaba.gif",
  20. audioPauseImgUrl: "../Images/dynaiselaba.png"
  21. }
  22. // 表格处理Start
  23. var pressTableFlag = false;
  24. var GetPadVal = function () {
  25. var PaddingVal = $(document.body).css("padding");
  26. if (PaddingVal == null || PaddingVal == undefined || PaddingVal == "" || PaddingVal == "0px") {
  27. return 0;
  28. }
  29. var PadValArr = PaddingVal.split(" ");
  30. if (PadValArr.length > 1) {
  31. return parseFloat(PadValArr[1]);
  32. }
  33. else {
  34. return parseFloat(PadValArr[0]);
  35. }
  36. };
  37. var AdjustTableFunc = function () {
  38. var Index = 0;
  39. $.each($("table"), function (index, item) {
  40. var TableWidth = isNaN(parseFloat($(item).width())) ? 0 : parseFloat($(item).width()); // 表格宽度
  41. // 替换HTML
  42. var ChildHtmlStr = $(item).prop("outerHTML")
  43. var HtmlStr = "<div class='TableContainer TContain_" + Index + "'></div>";
  44. $(item).after(HtmlStr);
  45. $(item).remove();
  46. var JqStr = ".TContain_" + Index;
  47. $(JqStr).append(ChildHtmlStr);
  48. Index += 1;
  49. });
  50. var BodyWidth = isNaN(parseFloat($(document).width())) ? 0 : (parseFloat($(document).width()) - 2*GetPadVal()); // 界面宽度
  51. var Index = 0;
  52. $.each($("table"), function (index, item) {
  53. var TableWidth = isNaN(parseFloat($(item).width())) ? 0 : parseFloat($(item).width()); // 表格宽度
  54. // 替换HTML
  55. var JqStr = ".TContain_" + Index;
  56. $(JqStr).css("width", BodyWidth + "px");
  57. if (TableWidth > BodyWidth) {
  58. // 额外显示滚动条
  59. var SHtmlStr = "<div class='PSBar' style='width: " + BodyWidth + "px;'></div>";
  60. $(JqStr).after(SHtmlStr);
  61. var HiddenRate = BodyWidth / TableWidth; // 滚动条比率
  62. var HiddenWidth = BodyWidth - (TableWidth - BodyWidth) * HiddenRate; // 现滚动条大小
  63. var CSHtmlStr = "<div class='CSBar' style='width: " + HiddenWidth + "px;'></div>";
  64. $(JqStr).next().append(CSHtmlStr);
  65. }
  66. Index += 1;
  67. });
  68. $.each($(".container-table"), function (index, item) {
  69. $(item).css("width", BodyWidth + "px");
  70. });
  71. // 滚动条事件
  72. $(".TableContainer").on("touchstart", function () {
  73. pressTableFlag = true;
  74. }).on("touchmove", function () {
  75. var TableWidth = isNaN(parseFloat($(this).find("table").width())) ? 0 : parseFloat($(this).find("table").width()); // 表格宽度
  76. BodyWidth = isNaN(parseFloat($(document).width())) ? 0 : (parseFloat($(document).width() - 2 * GetPadVal())); // 界面宽度
  77. var HiddenRate = BodyWidth / TableWidth; // 滚动条比率
  78. var SLeftWdith = isNaN(parseFloat($(this)[0].scrollLeft)) ? 0 : parseFloat($(this)[0].scrollLeft);
  79. SLeftWdith *= HiddenRate;
  80. var NextClsName = $(this).next().attr("class");
  81. if (NextClsName == "PSBar") {
  82. $(this).next().find(".CSBar").css("left", SLeftWdith + "px");
  83. }
  84. });
  85. window.addEventListener("scroll", function (event) {
  86. var ClsName = event.target.className;
  87. if (ClsName == undefined) {
  88. return;
  89. }
  90. ClsName = ClsName.replace("TableContainer ", ".");
  91. var TableWidth = isNaN(parseFloat($(ClsName).find("table").width())) ? 0 : parseFloat($(ClsName).find("table").width()); // 表格宽度
  92. BodyWidth = isNaN(parseFloat($(document).width())) ? 0 : (parseFloat($(document).width() - 2 * GetPadVal())); // 界面宽度
  93. var HiddenRate = BodyWidth / TableWidth; // 滚动条比率
  94. var SLeftWdith = isNaN(parseFloat($(ClsName)[0].scrollLeft)) ? 0 : parseFloat($(ClsName)[0].scrollLeft);
  95. SLeftWdith *= HiddenRate;
  96. var NextClsName = $(ClsName).next().attr("class");
  97. if (NextClsName == "PSBar") {
  98. $(ClsName).next().find(".CSBar").css("left", SLeftWdith + "px");
  99. }
  100. }, true);
  101. };
  102. // 表格处理End
  103. // 隐藏答案处理
  104. var GetSpaceStr = function (WdithVal) {
  105. console.log("WdithVal=>" + WdithVal);
  106. //16&emsp;,4&nbsp;,3&thinsp;
  107. WdithVal = parseInt(WdithVal);
  108. console.log("WdithVal=>" + WdithVal);
  109. var MaxY = (WdithVal - (WdithVal % 4))/4, MaxZ = (WdithVal - (WdithVal % 3))/3;
  110. var ReStr = "";
  111. if (WdithVal % 4 == 0) {
  112. while (MaxY > 0) {
  113. ReStr += "&nbsp;";
  114. MaxY -= 1;
  115. }
  116. }
  117. else if (WdithVal % 3 == 0) {
  118. while (MaxZ > 0) {
  119. ReStr += "&thinsp;";
  120. MaxZ -= 1;
  121. }
  122. }
  123. else {
  124. var TempNum = WdithVal;
  125. var ReFrashFlag = false;
  126. var SpaceY = MaxY, SpaceZ;
  127. var ZYX=1000000000, ZYY=1000000000, ZYZ=1000000000;
  128. while (TempNum != 0) {
  129. TempNum = WdithVal;
  130. TempNum -= SpaceY * 4;
  131. SpaceZ = parseInt((TempNum - TempNum % 3) / 3);
  132. TempNum -= SpaceZ * 3;
  133. if (ZYZ > TempNum) {
  134. ZYX = SpaceY;
  135. ZYY = SpaceZ;
  136. ZYZ = TempNum;
  137. }
  138. if (SpaceY > 0) {
  139. SpaceY -= 1;
  140. }
  141. else {
  142. TempNum = 0;
  143. }
  144. }
  145. console.log("ZYX=>" + ZYX + ",ZYY=>" + ZYY);
  146. while (ZYX > 0) {
  147. ReStr += "&nbsp;";
  148. ZYX -= 1;
  149. }
  150. while (ZYY > 0) {
  151. ReStr += "&thinsp;";
  152. ZYY -= 1;
  153. }
  154. }
  155. return ReStr;
  156. };
  157. //显示、隐藏答案
  158. function showHideAnswer(flag) {
  159. if (flag) {
  160. //$(".underlineContent").show();
  161. $(".underlineContent").css("color", "#92D050");
  162. $(".yaoshi").attr("src", PicInfo.yaoshiShowImgUrl);
  163. $.each($(".underlineContent"), function (index, item) {
  164. var underlineContentText = $(this).text(); // 获取文本内容
  165. var widthValue = $(item).css("width");
  166. var newClsName = $(item).next().attr("class");
  167. if (newClsName != "underlineContentShow") {
  168. var addHtml = "";
  169. if (hasChineseWorld(underlineContentText)) {
  170. addHtml = "<span class='underlineContentShow' style='width:" + widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  171. }
  172. else {
  173. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  174. }
  175. $(item).css("display", "inline").after(addHtml);
  176. }
  177. else {
  178. $(item).css("display", "inline").next().attr("data-status", "0");
  179. }
  180. if (underlineContentText.indexOf("√") > -1) {
  181. $(this).parent().find(".checkbox").find("input").prop('checked', true);
  182. }
  183. });
  184. }
  185. else {
  186. //$(".underlineContent").hide();
  187. $(".underlineContent").css("color", "#ffffff");
  188. $(".yaoshi").attr("src", PicInfo.yaoshiHideImgUrl);
  189. $.each($(".underlineContent,.underlineContent.no-answer"), function (index, item) {
  190. var underlineContentText = $(this).text(); // 获取文本内容
  191. var widthValue = $(item).css("width");
  192. var newClsName = $(item).next().attr("class");
  193. if (newClsName != "underlineContentShow") {
  194. var addHtml = "";
  195. if (hasChineseWorld(underlineContentText)) {
  196. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  197. }
  198. else {
  199. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  200. }
  201. $(item).css("display", "none").after(addHtml);
  202. $(item).next().attr("data-status", "1");
  203. }
  204. else {
  205. $(item).css("display", "none").next().attr("data-status", "1");
  206. }
  207. if (underlineContentText.indexOf("√") > -1) {
  208. $(this).parent().find(".checkbox").find("input").prop('checked', false);
  209. }
  210. });
  211. }
  212. }
  213. ///显示、隐藏钥匙及答案 isShowYX:显示和隐藏钥匙,isShowAS:显示和隐藏答案
  214. function showHideAnswerEx(isShowYX, isShowAS) {
  215. if (isShowYX) {
  216. $(".yaoshi").show();
  217. }
  218. else {
  219. $(".yaoshi").hide();
  220. }
  221. if (isShowAS) {
  222. $.each($(".underlineContent"), function (index, item) {
  223. var underlineContentText = $(this).text(); // 获取文本内容
  224. var widthValue = $(item).css("width");
  225. var newClsName = $(item).next().attr("class");
  226. if (newClsName != "underlineContentShow") {
  227. var addHtml = "";
  228. if (hasChineseWorld(underlineContentText)) {
  229. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+ GetSpaceStr(widthValue) +"</span>";
  230. }
  231. else {
  232. addHtml = "<span class='underlineContentShow' style='width:" + widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  233. }
  234. $(item).css("display", "inline").after(addHtml);
  235. }
  236. else {
  237. $(item).css("display", "inline").next().attr("data-status", "0");
  238. }
  239. if (underlineContentText.indexOf("√") > -1) {
  240. $(this).parent().find(".checkbox").find("input").prop('checked', true);
  241. }
  242. //$(item).html($(item).attr("data-text"));
  243. if (!$(item).hasClass("no-answer")) {
  244. $(item).css("color", "#92D050");
  245. }
  246. else {
  247. $(item).css("color", "#989898");
  248. }
  249. $(item).find(".wordStyle").css("color", "#db5d00");
  250. $(item).find(".phraseStyle").css("background-color", "#f2db8b");
  251. });
  252. $(".yaoshi").attr("data-status", "1");
  253. $(".yaoshi").attr("src", PicInfo.yaoshiShowImgUrl);
  254. }
  255. else {
  256. $.each($(".underlineContent,.underlineContent.no-answer"), function (index, item) {
  257. var underlineContentText = $(this).text(); // 获取文本内容
  258. var widthValue = $(item).css("width");
  259. var newClsName = $(item).next().attr("class");
  260. if (newClsName != "underlineContentShow") {
  261. var addHtml = "";
  262. if (hasChineseWorld(underlineContentText)) {
  263. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  264. }
  265. else {
  266. addHtml = "<span class='underlineContentShow' style='width:" + widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  267. }
  268. $(item).css("display", "none").after(addHtml);
  269. $(item).next().attr("data-status", "1");
  270. }
  271. else {
  272. $(item).css("display", "none").next().attr("data-status", "1");
  273. }
  274. if (underlineContentText.indexOf("√") > -1) {
  275. $(this).parent().find(".checkbox").find("input").prop('checked', false);
  276. }
  277. $(item).css("color", "#ffffff");
  278. $(item).find(".wordStyle").css("color", "#ffffff");
  279. $(item).find(".phraseStyle").css("background-color", "#ffffff");
  280. });
  281. $(".yaoshi").attr("data-status", "0");
  282. $(".yaoshi").attr("src", PicInfo.yaoshiHideImgUrl);
  283. }
  284. }
  285. //页面加载完,原文 绑定事件
  286. function bindEventTeaOrignalYS() {
  287. var bodyWidth = $(document.body).width();
  288. //处理答题点
  289. $.each($(".yaoshi"), function (index, item) {
  290. $(item).attr('answer-id', index);
  291. });
  292. //给音频绑定一个ID
  293. $.each($(".audioImg"), function (index, item) {
  294. $(item).attr("audiourl", "");
  295. $(item).attr('audio-id', index);
  296. });
  297. //给视频图标处理
  298. $.each($(".videoImg"), function (index, item) {
  299. $(item).attr("audiourl", "");
  300. });
  301. //给口语图标处理
  302. $.each($(".oralLanguageImg"), function (index, item) {
  303. $(item).attr("audiourl", "");
  304. });
  305. //处理参考答案
  306. $.each($(".underlineContent"), function (index, item) {
  307. $(item).attr("data-text", $(item).html());
  308. });
  309. //去除多余的U空标签
  310. $.each($("u"), function (index, item) {
  311. var text = $(item).text();
  312. text = text.replace(/\s+/g, "");
  313. if (text == "") {
  314. $(item).remove();
  315. }
  316. });
  317. //处理暂无参考答案
  318. $.each($(".yaoshi"), function (index, item) {
  319. var parent = $(item).parent();
  320. var prev = $(item).nextUntil(".yaoshi").find(".underlineContent");
  321. if (prev.length == 0) {
  322. var spanHtml = document.createElement("span");
  323. //添加子节点
  324. var uHtml = document.createElement("u");
  325. uHtml.className = "underlineContent no-answer";
  326. uHtml.innerText = "暂无参考答案";
  327. uHtml.setAttribute("data-text", uHtml.innerText);
  328. //处理改错题及勾选题
  329. if ($(parent)[0].tagName == 'P') {
  330. if ($(parent).hasClass('correntQue') || $(parent).hasClass('boxQue')) {
  331. uHtml.innerHTML = "&nbsp;&nbsp;&nbsp;";
  332. //改错题,要随机下划线长度
  333. if ($(parent).hasClass('correntQue')) {
  334. uHtml.style = "width:" + randomNum(220, 300) + "px;";
  335. }
  336. uHtml.setAttribute("data-text", "");
  337. }
  338. }
  339. $(spanHtml).html(uHtml.outerHTML);
  340. $(item).after(spanHtml);
  341. }
  342. });
  343. //处理表格宽度
  344. AdjustTableFunc();
  345. //$.each($(".container-table"), function (index, item) {
  346. // $(item).css("width", bodyWidth + "px");
  347. //});
  348. //一题多空的答题点标注
  349. var checkId = 0;
  350. var headid = -1;
  351. var groupId = -1;
  352. $(".multipleStart").each(function (i, item) {
  353. var $startNode = $(item);
  354. $.merge($(item).nextUntil(".multipleEnd").filter("[class*='group']"), $(item).nextUntil(".multipleEnd").find("[class*='group']")).each(function (index, item) {
  355. checkId = $(item).find('.yaoshi').attr("answer-id");
  356. var gid = $(item).attr('class').replace(/.*group(\d+).*/g, "$1");
  357. if (index == 0 || groupId != gid) {
  358. groupId = gid;
  359. headid = checkId;
  360. }
  361. $(item).find('.yaoshi').attr('parent-anid', headid);
  362. });
  363. });
  364. //点击喇叭事件,音频播放
  365. $(".audioImg").on("click", function () {
  366. audioPlayClick(this);
  367. });
  368. //显示/隐藏习题答案
  369. $(".yaoshi").on("click", function () {
  370. var parentAnid = $(this).attr("parent-anid");
  371. var curDisplay = $(this).nextUntil(".yaoshi").find(".underlineContent").eq(0).css("display");
  372. if (curDisplay == "undefined" || curDisplay == undefined) return;
  373. if (curDisplay == "none" || $(this).attr("data-status") == "0") {
  374. if (parentAnid != undefined) {
  375. $.each($(this).parents().find(".yaoshi[parent-anid='" + parentAnid + "']"), function (index, item) {
  376. $(item).attr("data-status", "1");
  377. $(item).attr("src", PicInfo.yaoshiShowImgUrl);
  378. $.each($(item).parent().find(".underlineContent"), function (cIndex, cItem) {
  379. var underlineContentText = $(cItem).text(); // 获取文本内容
  380. var widthValue = $(cItem).css("width");
  381. var newClsName = $(cItem).next().attr("class");
  382. if (newClsName != "underlineContentShow") {
  383. var addHtml = "";
  384. if (hasChineseWorld(underlineContentText)) {
  385. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  386. }
  387. else {
  388. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  389. }
  390. $(cItem).css("display", "inline").after(addHtml);
  391. }
  392. else {
  393. $(cItem).css("display", "inline").next().attr("data-status", "0");
  394. }
  395. if (underlineContentText.indexOf("√") > -1) {
  396. $(this).parent().find(".checkbox").find("input").prop('checked', true);
  397. }
  398. if (!$(item).hasClass("no-answer")) {
  399. $(item).css("color", "#92D050");
  400. }
  401. else {
  402. $(item).css("color", "#989898");
  403. }
  404. $(item).find(".wordStyle").css("color", "#db5d00");
  405. $(item).find(".phraseStyle").css("background-color", "#f2db8b");
  406. });
  407. });
  408. }
  409. else {
  410. $(this).attr("data-status", "1");
  411. $(this).attr("src", PicInfo.yaoshiShowImgUrl);
  412. $.each($(this).nextUntil(".yaoshi").find(".underlineContent"), function (index, item) {
  413. var underlineContentText = $(this).text(); // 获取文本内容
  414. var widthValue = $(item).css("width");
  415. var newClsName = $(item).next().attr("class");
  416. if (newClsName != "underlineContentShow") {
  417. var addHtml = "";
  418. if (hasChineseWorld(underlineContentText)) {
  419. addHtml = "<span class='underlineContentShow' style='width:" + widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  420. }
  421. else {
  422. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  423. }
  424. $(item).css("display", "inline").after(addHtml);
  425. }
  426. else {
  427. $(item).css("display", "inline").next().attr("data-status", "0");
  428. }
  429. if (underlineContentText.indexOf("√") > -1) {
  430. $(this).parent().find(".checkbox").find("input").prop('checked', true);
  431. }
  432. if (!$(item).hasClass("no-answer")) {
  433. $(item).css("color", "#92D050");
  434. }
  435. else {
  436. $(item).css("color", "#989898");
  437. }
  438. $(item).find(".wordStyle").css("color", "#db5d00");
  439. $(item).find(".phraseStyle").css("background-color", "#f2db8b");
  440. });
  441. }
  442. //不再存在已隐藏的钥匙,移动端回调
  443. if ($(".yaoshi[data-status='0']").length == 0) {
  444. //添加回调
  445. console.log("全部显示了");
  446. }
  447. }
  448. else {
  449. if (parentAnid != undefined) {
  450. $.each($(this).parents().find(".yaoshi[parent-anid='" + parentAnid + "']"), function (index, item) {
  451. $(item).attr("data-status", "0");
  452. $(item).attr("src", PicInfo.yaoshiHideImgUrl);
  453. $.each($(item).parent().find(".underlineContent"), function (cIndex, cItem) {
  454. var underlineContentText = $(cItem).text(); // 获取文本内容
  455. var widthValue = $(cItem).css("width");
  456. var newClsName = $(cItem).next().attr("class");
  457. if (newClsName != "underlineContentShow") {
  458. var addHtml = "";
  459. if (hasChineseWorld(underlineContentText)) {
  460. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  461. }
  462. else {
  463. addHtml = "<span class='underlineContentShow' style='width:" + widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  464. }
  465. $(cItem).css("display", "none").after(addHtml);
  466. $(cItem).next().attr("data-status", "1");
  467. }
  468. else {
  469. $(cItem).css("display", "none").next().attr("data-status", "1");
  470. }
  471. if (underlineContentText.indexOf("√") > -1) {
  472. $(this).parent().find(".checkbox").find("input").prop('checked', false);
  473. }
  474. $(item).css("color", "#ffffff");
  475. $(item).find(".wordStyle").css("color", "#ffffff");
  476. $(item).find(".phraseStyle").css("background-color", "#ffffff");
  477. });
  478. });
  479. }
  480. else {
  481. $(this).attr("data-status", "0");
  482. $(this).attr("src", PicInfo.yaoshiHideImgUrl);
  483. $.each($(this).nextUntil(".yaoshi").find(".underlineContent"), function (index, item) {
  484. var underlineContentText = $(this).text(); // 获取文本内容
  485. var widthValue = $(item).css("width");
  486. var newClsName = $(item).next().attr("class");
  487. if (newClsName != "underlineContentShow") {
  488. var addHtml = "";
  489. if (hasChineseWorld(underlineContentText)) {
  490. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  491. }
  492. else {
  493. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  494. }
  495. $(item).css("display", "none").after(addHtml);
  496. $(item).next().attr("data-status", "1");
  497. }
  498. else {
  499. $(item).css("display", "none").next().attr("data-status", "1");
  500. }
  501. if (underlineContentText.indexOf("√") > -1) {
  502. $(this).parent().find(".checkbox").find("input").prop('checked', false);
  503. }
  504. $(item).css("color", "#ffffff");
  505. $(item).find(".wordStyle").css("color", "#ffffff");
  506. $(item).find(".phraseStyle").css("background-color", "#ffffff");
  507. });
  508. }
  509. //添加回调
  510. onClickKeyHide();
  511. }
  512. });
  513. //点击播放事件,视频播放
  514. $(".videoImg").on("click", function () {
  515. var curHtml = $(this).parent().find(".videoUrl").html();
  516. var curAlt = $(this).attr("alt");//播放视频地址
  517. playVisiableAudioCallBack(2, $(this).attr("alt"));
  518. });
  519. $("td").attr("style", "");
  520. //处理表格样式
  521. //$(".container-table").each(function (index, item) {
  522. // var TableWidth = isNaN(parseFloat($(item).find("table").css("width"))) ? 0 : parseFloat($(item).find("table").css("width"));
  523. // var ScrollLeft = isNaN(parseFloat($(item).scrollLeft())) ? 0 : parseFloat($(item).scrollLeft());
  524. // var HWidth = parseFloat(TableWidth) -parseFloat(bodyWidth);
  525. // var HRate = parseFloat(bodyWidth) / parseFloat(TableWidth);
  526. // var SSWidth = bodyWidth - HWidth * HRate; // 显示滚动条宽度
  527. // if (TableWidth > bodyWidth) {
  528. // var HtmlStr = "<div class='ShowSBar' style='width:" + bodyWidth + "px;height:5px;background-color:#eee;position:relative;left:0px;bottom:3px;z-index:2;border-radius:2px;'><div class='ShowSBarC' style='width:" +SSWidth + "px;height:5px;background-color:#ccc;position:absolute;left:" +ScrollLeft + "px;bottom:0px;z-index:3;border-radius:2px;'></div></div>";
  529. // $(item).after(HtmlStr);
  530. // }
  531. // });
  532. //$(".container-table").on("touchstart", function () {
  533. // var TableWidth = isNaN(parseFloat($(this).find("table").css("width"))) ? 0: parseFloat($(this).find("table").css("width"));
  534. // if (TableWidth > bodyWidth) {
  535. // pressTableFlag = true;
  536. // }
  537. // }).on("touchmove", function () {
  538. // var TableWidth = isNaN(parseFloat($(this).find("table").css("width"))) ? 0: parseFloat($(this).find("table").css("width"));
  539. // var ScrollLeft = isNaN(parseFloat($(this).scrollLeft())) ? 0: parseFloat($(this).scrollLeft());
  540. // var HRate = parseFloat(bodyWidth) / parseFloat(TableWidth);
  541. // var ShowSBarName = $(this).next().attr("class");
  542. // if (ScrollLeft >= 0 && ShowSBarName == "ShowSBar" && $(this).next().find(".ShowSBarC").length > 0) {
  543. // // 有滚动条的进行移动
  544. // $(this).next().find(".ShowSBarC").css("left", (ScrollLeft * HRate) + "px");
  545. // }
  546. //});
  547. }
  548. //页面加载完,课件 绑定事件
  549. function bindEventYS() {
  550. var bodyWidth = $(document.body).width();
  551. //不存在underline 属性下有内容,所以全部隐藏,若有就是源头数据有问题
  552. $('.underline').css("display", "none");
  553. $.each($(".yaoshi"), function (index, item) {
  554. $(item).attr('answer-id', index);
  555. });
  556. //给音频绑定一个ID
  557. $.each($(".audioImg"), function (index, item) {
  558. $(item).attr("audiourl", "");
  559. $(item).attr('audio-id', index);
  560. });
  561. //给视频图标处理
  562. $.each($(".videoImg"), function (index, item) {
  563. $(item).attr("audiourl", "");
  564. });
  565. //给口语图标处理
  566. $.each($(".oralLanguageImg"), function (index, item) {
  567. $(item).attr("audiourl", "");
  568. });
  569. //去除多余的U空标签
  570. $.each($("u"), function (index, item) {
  571. var text = $(item).text();
  572. text = text.replace(/\s+/g, "");
  573. if (text == "") {
  574. $(item).remove();
  575. }
  576. });
  577. //处理暂无参考答案
  578. $.each($(".yaoshi"), function (index, item) {
  579. var parent = $(item).parent();
  580. var prev = $(item).nextAll(".underlineContent");
  581. if (prev.length == 0) {
  582. var uHtml = document.createElement("u");
  583. uHtml.className = "underlineContent no-answer";
  584. uHtml.innerText = "暂无参考答案";
  585. uHtml.setAttribute("data-text", uHtml.innerText);
  586. //处理改错题及勾选题
  587. if ($(parent)[0].tagName == 'P') {
  588. if ($(parent).hasClass('correntQue') || $(parent).hasClass('boxQue')) {
  589. uHtml.innerHTML = "&nbsp;&nbsp;&nbsp;";
  590. //改错题,要随机下划线长度
  591. if ($(parent).hasClass('correntQue')) {
  592. uHtml.style = "width:" + randomNum(220, 300) + "px;";
  593. }
  594. uHtml.setAttribute("data-text", "");
  595. }
  596. }
  597. $(item).after(uHtml);
  598. }
  599. });
  600. //处理表格宽度
  601. AdjustTableFunc();
  602. //$.each($(".container-table"), function (index, item) {
  603. // $(item).css("width", bodyWidth + "px");
  604. //});
  605. //一题多空的答题点标注
  606. var checkId = 0;
  607. var headid = -1;
  608. var groupId = -1;
  609. $(".multipleStart").each(function (i, item) {
  610. var $startNode = $(item);
  611. $.merge($(item).nextUntil(".multipleEnd").filter("[class*='group']"), $(item).nextUntil(".multipleEnd").find("[class*='group']")).each(function (index, item) {
  612. checkId = $(item).find('.yaoshi').attr("answer-id");
  613. var gid = $(item).attr('class').replace(/.*group(\d+).*/g, "$1");
  614. if (index == 0 || groupId != gid) {
  615. groupId = gid;
  616. headid = checkId;
  617. }
  618. $(item).find('.yaoshi').attr('parent-anid', headid);
  619. });
  620. });
  621. //显示/隐藏习题答案
  622. $(".yaoshi").on("click", function () {
  623. var parentAnid = $(this).attr("parent-anid");
  624. if ($(this).attr("data-status") == "0") {
  625. // 显示处理
  626. if (parentAnid != undefined) {
  627. $.each($(this).parents().find(".yaoshi[parent-anid='" + parentAnid + "']"), function (index, fItem) {
  628. $(fItem).attr("data-status", "1");
  629. $(fItem).attr("src", PicInfo.yaoshiShowImgUrl);
  630. $.each($(fItem).parent().find(".underlineContent"), function (index, item) {
  631. var underlineContentText = $(this).text(); // 获取文本内容
  632. var widthValue = $(item).css("width");
  633. var newClsName = $(item).parent().find(".underlineContent").next().attr("class");
  634. if (newClsName != "underlineContentShow") {
  635. var addHtml = "";
  636. if (hasChineseWorld(underlineContentText)) {
  637. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  638. }
  639. else {
  640. addHtml = "<span class='underlineContentShow' style='width:" + widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  641. }
  642. $(item).css("display", "inline").after(addHtml);
  643. }
  644. else {
  645. $(item).css("display", "inline").next().attr("data-status", "0");
  646. }
  647. if (underlineContentText.indexOf("√") > -1) {
  648. $(this).parent().find(".checkbox").find("input").prop('checked', true);
  649. }
  650. if (!$(item).hasClass("no-answer")) {
  651. $(item).css("color", "#92D050");
  652. }
  653. else {
  654. $(item).css("color", "#989898");
  655. }
  656. $(item).find(".wordStyle").css("color", "#db5d00");
  657. $(item).find(".phraseStyle").css("background-color", "#f2db8b");
  658. });
  659. });
  660. }
  661. else {
  662. $(this).attr("data-status", "1");
  663. $(this).attr("src", PicInfo.yaoshiShowImgUrl);
  664. //$(this).nextUntil(".yaoshi").filter(".underlineContent").css("color", "#92D050");
  665. $.each($(this).nextUntil(".yaoshi").filter(".underlineContent"), function (index, item) {
  666. var underlineContentText = $(this).text(); // 获取文本内容
  667. var widthValue = $(item).css("width");
  668. var newClsName = $(item).next().attr("class");
  669. if (newClsName != "underlineContentShow") {
  670. var addHtml = "";
  671. if (hasChineseWorld(underlineContentText)) {
  672. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  673. }
  674. else {
  675. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  676. }
  677. $(item).css("display", "inline").after(addHtml);
  678. }
  679. else {
  680. $(item).css("display", "inline").next().attr("data-status", "0");
  681. }
  682. if (underlineContentText.indexOf("√") > -1) {
  683. $(this).parent().find(".checkbox").find("input").prop('checked', true);
  684. }
  685. if (!$(item).hasClass("no-answer")) {
  686. $(item).css("color", "#92D050");
  687. }
  688. else {
  689. $(item).css("color", "#989898");
  690. }
  691. $(item).find(".wordStyle").css("color", "#db5d00");
  692. $(item).find(".phraseStyle").css("background-color", "#f2db8b");
  693. });
  694. }
  695. //不再存在已隐藏的钥匙,移动端回调
  696. if ($(".yaoshi[data-status='0']").length == 0) {
  697. //添加回调
  698. console.log("全部显示了");
  699. }
  700. }
  701. else {
  702. // 隐藏处理
  703. if (parentAnid != undefined) {
  704. $.each($(this).parents().find(".yaoshi[parent-anid='" + parentAnid + "']"), function (index, fItem) {
  705. $(fItem).attr("data-status", "0");
  706. $(fItem).attr("src", PicInfo.yaoshiHideImgUrl);
  707. $.each($(fItem).parent().find(".underlineContent"), function (index, item) {
  708. var underlineContentText = $(this).text(); // 获取文本内容
  709. var widthValue = $(item).css("width");
  710. var newClsName = $(item).parent().find(".underlineContent").next().attr("class");
  711. if (newClsName != "underlineContentShow") {
  712. var addHtml = "";
  713. if (hasChineseWorld(underlineContentText)) {
  714. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  715. }
  716. else {
  717. addHtml = "<span class='underlineContentShow' style='width:" + widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  718. }
  719. $(item).css("display", "none").after(addHtml);
  720. $(item).next().attr("data-status", "1");
  721. }
  722. else {
  723. $(item).css("display", "none").next().attr("data-status", "1");
  724. }
  725. if (underlineContentText.indexOf("√") > -1) {
  726. $(this).parent().find(".checkbox").find("input").prop('checked', false);
  727. }
  728. $(item).css("color", "#ffffff");
  729. $(item).find(".wordStyle").css("color", "#ffffff");
  730. $(item).find(".phraseStyle").css("background-color", "#ffffff");
  731. });
  732. });
  733. }
  734. else {
  735. $(this).attr("data-status", "0");
  736. $(this).attr("src", PicInfo.yaoshiHideImgUrl);
  737. //$(this).nextUntil(".yaoshi").filter(".underlineContent").css("color", "#ffffff");
  738. $.each($(this).nextUntil(".yaoshi").filter(".underlineContent"), function (index, item) {
  739. var underlineContentText = $(this).text(); // 获取文本内容
  740. var widthValue = $(item).css("width");
  741. var newClsName = $(item).next().attr("class");
  742. if (newClsName != "underlineContentShow") {
  743. var addHtml = "";
  744. if (hasChineseWorld(underlineContentText)) {
  745. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  746. }
  747. else {
  748. addHtml = "<span class='underlineContentShow' style='width:" +widthValue + ";' data-status='0'>"+GetSpaceStr(widthValue) +"</span>";
  749. }
  750. $(item).css("display", "none").after(addHtml);
  751. $(item).next().attr("data-status", "1");
  752. }
  753. else {
  754. $(item).css("display", "none").next().attr("data-status", "1");
  755. }
  756. if (underlineContentText.indexOf("√") > -1) {
  757. $(this).parent().find(".checkbox").find("input").prop('checked', false);
  758. }
  759. $(item).css("color", "#ffffff");
  760. $(item).find(".wordStyle").css("color", "#ffffff");
  761. $(item).find(".phraseStyle").css("background-color", "#ffffff");
  762. });
  763. }
  764. //添加回调
  765. onClickKeyHide();
  766. }
  767. });
  768. //点击喇叭事件,音频播放
  769. $(".audioImg").on("click", function () {
  770. audioPlayClick(this);
  771. });
  772. //点击播放事件,视频播放
  773. $(".videoImg").on("click", function () {
  774. $(this).attr("audiourl", "");
  775. var curHtml = $(this).parent().find(".videoUrl").html();
  776. var curAlt = $(this).attr("alt");//播放视频地址
  777. playVisiableAudioCallBack(2, $(this).attr("alt"));
  778. });
  779. $("td").attr("style", "");
  780. //处理表格样式
  781. //$(".container-table").each(function (index, item) {
  782. // var TableWidth = isNaN(parseFloat($(item).find("table").css("width"))) ? 0 : parseFloat($(item).find("table").css("width"));
  783. // var ScrollLeft = isNaN(parseFloat($(item).scrollLeft())) ? 0 : parseFloat($(item).scrollLeft());
  784. // var HWidth = parseFloat(TableWidth) - parseFloat(bodyWidth);
  785. // var HRate = parseFloat(bodyWidth) / parseFloat(TableWidth);
  786. // var SSWidth = bodyWidth - HWidth * HRate; // 显示滚动条宽度
  787. // if (TableWidth > bodyWidth) {
  788. // var HtmlStr = "<div class='ShowSBar' style='width:" + bodyWidth + "px;height:5px;background-color:#eee;position:relative;left:0px;bottom:3px;z-index:2;border-radius:2px;'><div class='ShowSBarC' style='width:" + SSWidth + "px;height:5px;background-color:#ccc;position:absolute;left:" + ScrollLeft + "px;bottom:0px;z-index:3;border-radius:2px;'></div></div>";
  789. // $(item).after(HtmlStr);
  790. // }
  791. //});
  792. //$(".container-table").on("touchstart", function () {
  793. // var TableWidth = isNaN(parseFloat($(this).find("table").css("width"))) ? 0 : parseFloat($(this).find("table").css("width"));
  794. // if (TableWidth > bodyWidth) {
  795. // pressTableFlag = true;
  796. // }
  797. //}).on("touchmove", function () {
  798. // var TableWidth = isNaN(parseFloat($(this).find("table").css("width"))) ? 0 : parseFloat($(this).find("table").css("width"));
  799. // var ScrollLeft = isNaN(parseFloat($(this).scrollLeft())) ? 0 : parseFloat($(this).scrollLeft());
  800. // var HRate = parseFloat(bodyWidth) / parseFloat(TableWidth);
  801. // var ShowSBarName = $(this).next().attr("class");
  802. // if (ScrollLeft >= 0 && ShowSBarName == "ShowSBar" && $(this).next().find(".ShowSBarC").length > 0) {
  803. // // 有滚动条的进行移动
  804. // $(this).next().find(".ShowSBarC").css("left", (ScrollLeft*HRate) + "px");
  805. // }
  806. //});
  807. }
  808. // 移动端使用,true:表示点击表格且正在移动,需阻止模块切换
  809. function getPressFlag() {
  810. alert(pressTableFlag);
  811. }
  812. // 滚动条渲染
  813. // 设置离焦事件
  814. function setPressFlag() {
  815. pressTableFlag = false;
  816. }
  817. // 判断是否存在中文(true表示存在)
  818. var hasChineseWorld = function (dataStr) {
  819. if (escape(dataStr).indexOf("%u") < 0) {
  820. return false;
  821. }
  822. else {
  823. return true;
  824. }
  825. };
  826. //学生端 处理作答区域
  827. var answerData = new Array();
  828. function handleAnswerRange() {
  829. //规范文本格式
  830. var answerId = "";
  831. var tempJson = new Array();
  832. //先处理一题多空的情况,获取两个之间的答题点
  833. $(".multipleStart").each(function (i, item) {
  834. $.merge($(item).nextUntil(".multipleEnd").filter("[class*='group']"), $(item).nextUntil(".multipleEnd").find("[class*='group']")).each(function (index, item) {
  835. var checkId = $(item).find('.yaoshi').attr("answer-id");
  836. var headid = $(item).find('.yaoshi').attr("parent-anid");
  837. var ischecked = $(item).find(".underlineContent").text().indexOf("√") > -1;
  838. var answerText = ischecked ? "√" : "";
  839. //勾选题
  840. if ($(item).hasClass('boxQue')) {
  841. $(item).find('.yaoshi').after("<div class='checkbox' answer-id='" + checkId + "' parent-anid='" + headid + "' answer-isky='2' answer-anstext=" + answerText + "><input id=" + checkId + " type='checkbox'><label for=" + checkId + "></label></div>");
  842. //$(item).find('input').prop('checked', ischecked);
  843. $(item).find('.underlineContent').hide();
  844. }
  845. //点击事件
  846. $(item).find('input').bind("click", function () {
  847. var curObj = new Object();
  848. curObj.Id = $(this).parent().attr("answer-id");//答题点ID
  849. curObj.pId = $(this).parent().attr("parent-anid");//答题点ID
  850. curObj.IsKY = $(this).parent().attr("answer-isky");//是否是口语试题,0-不是口语题,1-是口语题,2-打勾题
  851. //curObj.Text = $(this).parent().attr("answer-text");//用户作答内容
  852. curObj.Score = $(this).parent().attr("answer-score");//作答评分
  853. curObj.AnsText = $(this).parent().attr("answer-anstext");//参考答案
  854. curObj.Comment = $(this).parent().attr("answer-comment");//评语
  855. curObj.pId = curObj.pId ? curObj.pId : curObj.Id;//组ID
  856. curObj.Text = $(this).prop("checked") ? "√" : "";//用户作答内容
  857. $(this).parent().attr("answer-text", curObj.Text);//用户作答内容
  858. $(".checkbox").removeClass("select-answer");
  859. $(".answer-body").removeClass("select-answer");
  860. $(this).parent().addClass("select-answer");
  861. //已作答,弹出作答答案
  862. if ($(this).parent().data("ans-status") == "1") {
  863. //移动端添加外部处理
  864. onClickAnswerPoint(JSON.stringify(curObj));
  865. }
  866. else {
  867. //移动端添加外部处理,弹出作答操作
  868. onClickAnswerPoint(JSON.stringify(curObj));
  869. }
  870. });
  871. //删除钥匙节点
  872. $(item).find('.yaoshi').hide();
  873. });
  874. });
  875. //所有underline不做处理
  876. $.each($(".yaoshi").nextUntil(".yaoshi").filter(".underline"), function (index, item) {
  877. tempId = $(item).prevAll(".yaoshi").attr("answer-id");
  878. //记录上一次的ID
  879. if (tempId == undefined) {
  880. tempId = answerId;
  881. }
  882. else {
  883. answerId = tempId;
  884. }
  885. var prev = $(item).prev();
  886. if ((prev.length == 0 || $(prev).attr("class") != "tag-span") && $(prev).attr("class") != "underlineContent") {
  887. if ($("span[answer-id='" + tempId + "']").length == 0) {
  888. $(item).prop("outerHTML", "<span answer-id='" + tempId + "' class='tag-span' answer-isky='0'>_</span>");
  889. }
  890. }
  891. $(item).remove();
  892. });
  893. //提取参考答案并规范文本格式
  894. answerId = "";
  895. $.each($(".yaoshi").nextUntil(".yaoshi").filter(".underlineContent"), function (index, item) {
  896. var info = new Object();
  897. info.Id = $(item).prevAll(".yaoshi").attr("answer-id");
  898. info.pId = $(item).prevAll(".yaoshi").attr("parent-anid");
  899. //记录上一次的ID
  900. if (info.Id == undefined) {
  901. info.Id = answerId;
  902. }
  903. else {
  904. answerId = info.Id;
  905. }
  906. if (info.pId == undefined) {
  907. info.pId = answerId;
  908. }
  909. info.AnsText = $(item).attr("data-text");
  910. if (info.AnsText == undefined) {
  911. info.AnsText = $(item).text();
  912. }
  913. tempJson.push(info);
  914. var prev = $(item).prev();
  915. if (!$(prev).hasClass("checkbox")) {
  916. if (prev.length == 0 || $(prev).attr("class") != "tag-span") {
  917. //替换答案
  918. $(item).prop("outerHTML", "<span answer-id='" + info.Id + "' class='tag-span' answer-isky='0'>_</span>");
  919. }
  920. else {
  921. $(item).remove();
  922. }
  923. }
  924. });
  925. //补充空钥匙的处理
  926. $.each($(".yaoshi"), function (index, item) {
  927. var Id = $(item).attr("answer-id");
  928. var prev = $(item).next();
  929. if (!$(prev).hasClass("checkbox")) {
  930. if (prev.length == 0 || $(prev).attr("class") != "tag-span") {
  931. if ($("span[answer-id='" + Id + "']").length == 0) {
  932. var uHtml = document.createElement("span");
  933. uHtml.className = "tag-span";
  934. uHtml.innerText = "_";
  935. uHtml.setAttribute("answer-id", Id);
  936. $(item).after(uHtml);
  937. }
  938. }
  939. }
  940. });
  941. //处理口语试题
  942. $.each($(".oralLanguage").nextUntil(".oralLanguageDone"), function (num, part) {
  943. if (part.tagName != "p") {
  944. $.each($(part).find(".tag-span"), function (index, item) {
  945. $(item).attr("answer-isky", "1");
  946. });
  947. }
  948. else {
  949. if ($(part).hasClass("underlinePart")) {
  950. $.each($(part).find(".tag-span"), function (index, item) {
  951. $(item).attr("answer-isky", "1");
  952. });
  953. }
  954. }
  955. });
  956. //合并参考答案数据
  957. var tempid = "";
  958. var temppid = "";
  959. var temptext = "";
  960. for (var i = 0; i < tempJson.length; i++) {
  961. if (tempid == tempJson[i].Id) {
  962. temptext = temptext + tempJson[i].AnsText;
  963. }
  964. else {
  965. if (tempid != "") {
  966. var info = new Object();
  967. info.Id = tempid;
  968. info.pId = temppid;
  969. info.AnsText = temptext;
  970. answerData.push(info);
  971. //重置
  972. tempid = "";
  973. temptext = "";
  974. }
  975. tempid = tempJson[i].Id;
  976. temppid = tempJson[i].pId;
  977. temptext = tempJson[i].AnsText;
  978. //最后一个存入
  979. if (i == tempJson.length - 1) {
  980. var info = new Object();
  981. info.Id = tempid;
  982. info.pId = temppid;
  983. info.AnsText = temptext;
  984. answerData.push(info);
  985. }
  986. }
  987. }
  988. //补全答题点
  989. var Num = 0;
  990. if (answerData.length > 0) {
  991. //Num = Number.parseInt(answerData[answerData.length - 1].Id);
  992. Num = Number.parseInt($(".yaoshi:last").attr('answer-id'));
  993. for (var i = 0; i < Num + 1; i++) {
  994. if (i < answerData.length) {
  995. var index = Number(answerData[i].Id) - i;
  996. for (var j = 0; j < index; j++) {
  997. var info = new Object();
  998. info.Id = (i + j).toString();
  999. info.pId = info.Id;
  1000. info.AnsText = "";
  1001. answerData.splice(i, 0, info);
  1002. }
  1003. }
  1004. else {
  1005. var info = new Object();
  1006. info.Id = (i).toString();
  1007. info.pId = info.Id;
  1008. info.AnsText = "";
  1009. answerData.splice(i, 0, info);
  1010. }
  1011. }
  1012. }
  1013. //添加答题点的点击UI及交互
  1014. $.each($(".tag-span"), function (index, item) {
  1015. var answerText = "";
  1016. var parentId = "";
  1017. var isky = $(item).attr('answer-isky');
  1018. var answerid = $(item).attr('answer-id');
  1019. for (var i = 0; i < answerData.length; i++) {
  1020. if (answerid == answerData[i].Id) {
  1021. parentId = answerData[i].pId;
  1022. answerText = answerData[i].AnsText;
  1023. break;
  1024. }
  1025. }
  1026. $(item).prop("outerHTML", "<div class='answer-body' answer-id='" + answerid + "' parent-anid='" + parentId + "' answer-anstext='" + answerText + "' answer-isky='" + isky + "' answer-showanswer='0'><div class='answer-audio-range'><img src='" + PicInfo.recordPlayImgUrl + "'/><span class='answer-audio-text'>作答音频</span></div><div class='answer-point-range'><img src='" + PicInfo.answerPointImgUrl + "'/><span class='answer-point-text'>答题点</span></div><buttom class='answer-text'></buttom></div>");
  1027. //删除钥匙节点
  1028. var prev = $("img[answer-id='" + answerid + "']");
  1029. if (prev.length > 0) {
  1030. $(prev).remove();
  1031. }
  1032. });
  1033. //添加点击事件
  1034. $(".answer-body").on("click", function () {
  1035. var curObj = new Object();
  1036. curObj.Id = $(this).attr("answer-id");//答题点ID
  1037. curObj.pId = $(this).attr("parent-anid");//答题点ID
  1038. curObj.IsKY = $(this).attr("answer-isky");//是否是口语试题,0-不是口语题,1-是口语题
  1039. curObj.Text = $(this).attr("answer-text");//用户作答内容
  1040. curObj.Score = $(this).attr("answer-score");//作答评分
  1041. curObj.AnsText = $(this).attr("answer-anstext");//参考答案
  1042. curObj.Comment = $(this).attr("answer-comment");//评语
  1043. curObj.pId = curObj.pId ? curObj.pId : curObj.Id;//组ID
  1044. $(".checkbox").removeClass("select-answer");
  1045. $(".answer-body").removeClass("select-answer");
  1046. $(this).addClass("select-answer");
  1047. //已作答,弹出作答答案
  1048. if ($(this).data("ans-status") == "1") {
  1049. //移动端添加外部处理
  1050. onClickAnswerPoint(JSON.stringify(curObj));
  1051. }
  1052. else {
  1053. //移动端添加外部处理,弹出作答操作
  1054. onClickAnswerPoint(JSON.stringify(curObj));
  1055. }
  1056. });
  1057. //去除多余的空格横线
  1058. $.each($(".underline"), function (index, item) {
  1059. var text = $(item).text();
  1060. text = text.replace(/\s+/g, "");
  1061. if (text == "") {
  1062. $(item).remove();
  1063. }
  1064. });
  1065. //删除所有钥匙节点
  1066. $("img[class=yaoshi]").remove();
  1067. //console.log(JSON.stringify(answerData));
  1068. return answerData;
  1069. }
  1070. //接收学生的作答
  1071. function reviewAnswer(answerJson) {
  1072. if (answerJson != "" && answerJson) {
  1073. var answerObj = JSON.parse(answerJson);
  1074. var selectElement = $(".answer-body[answer-id='" + answerObj.Id + "']");
  1075. var audioElement = $(selectElement).children(".answer-audio-range").children("img").eq(0);
  1076. answerObj.IsKY = $(selectElement).attr("answer-isky");//是否是口语试题,0-不是口语题,1-是口语题
  1077. //是否为音频作答
  1078. if ((answerObj.Type == 3 || answerObj.Type == 4) && answerObj.AudioUrl != "") {
  1079. $(selectElement).children(".answer-point-range").hide();
  1080. $(selectElement).children(".answer-audio-range").css("display", "inline-block");
  1081. $(selectElement).children(".answer-audio-range").children("span").text("作答音频(" + answerObj.AudioLength + "s)");
  1082. //填充作答内容
  1083. $(selectElement).attr("answer-text", answerObj.Text);
  1084. if (answerObj.Text != "") {
  1085. answerObj.Text = "(" + answerObj.Text + ")";
  1086. $(selectElement).children(".answer-text").show();
  1087. $(selectElement).children(".answer-text").text(answerObj.Text);
  1088. }
  1089. //是否之前存在作答音频
  1090. $(selectElement).attr("answer-url", answerObj.AudioUrl);
  1091. $(audioElement).attr("src", PicInfo.recordPlayImgUrl);
  1092. $(selectElement).children(".answer-audio-range").attr("play-status", "0");
  1093. //独立绑定事件
  1094. $(audioElement).on("click", function () {
  1095. recordAudioClick(this, answerObj.Id, answerObj.AudioUrl);
  1096. });
  1097. $(selectElement).children(".answer-audio-range").children("span").on("click", function () {
  1098. $(".answer-body").removeClass("select-answer");
  1099. $(selectElement).addClass("select-answer");
  1100. onClickAnswerPoint(JSON.stringify(answerObj));
  1101. });
  1102. }
  1103. else {
  1104. $(selectElement).attr("answer-text", answerObj.Text);//填充作答内容
  1105. $(selectElement).children(".answer-audio-range").hide();
  1106. if (answerObj.Text != "") {
  1107. $(selectElement).children(".answer-text").show();
  1108. $(selectElement).children(".answer-point-range").hide();
  1109. $(selectElement).children(".answer-text").text(answerObj.Text);
  1110. }
  1111. else {
  1112. $(selectElement).children(".answer-text").hide();
  1113. $(selectElement).children(".answer-point-range").show();
  1114. }
  1115. }
  1116. }
  1117. }
  1118. //提交,获取所有作答答案及参考答案
  1119. function getAllAnswer() {
  1120. //处理作答
  1121. $.each($(".answer-body"), function (index, item) {
  1122. var mytext = $(item).children(".answer-text").text();
  1123. var curDisplay = $(item).children(".answer-audio-range").css("display");
  1124. if (mytext == "" && curDisplay == "none") {
  1125. mytext = "未作答";
  1126. $(item).children(".answer-point-range").hide();
  1127. $(item).children(".answer-text").show();
  1128. $(item).children(".answer-text").text(mytext);
  1129. $(item).children(".answer-text").addClass("no-answer");
  1130. }
  1131. });
  1132. $(".answer-body").removeClass("select-answer");//移除样式
  1133. $(".answer-body").unbind("click");//取消点击绑定事件
  1134. $(".answer-body").children(".answer-audio-range").children("span").unbind("click");//取消点击绑定事件
  1135. //打勾题的还原
  1136. $.each($(".checkbox"), function (num, item) {
  1137. var answerid = $(item).attr("answer-id");
  1138. var parentid = $(item).attr("parent-anid");
  1139. //提交直接还原作答现场
  1140. var mytext = $(item).attr("answer-text");//我的答案
  1141. var ischecked = mytext.indexOf("√") > -1;
  1142. var answerText = $(item).attr("answer-anstext");//参考答案
  1143. mytext = mytext == "" ? "__" : mytext;
  1144. $(item).prop("outerHTML", "<div class='answer-body' answer-id='" + answerid + "' parent-anid='" + parentid + "' answer-anstext='" + answerText + "' answer-isky='2'><div class='answer-audio-range'><img src='" + PicInfo.recordPlayImgUrl + "'/><span class='answer-audio-text'>作答音频</span></div><div class='answer-point-range' style='display:none;'><img src='" + PicInfo.answerPointImgUrl + "'/><span class='answer-point-text'>答题点</span></div><buttom class='answer-text' style='display:block;'>" + mytext + "</buttom></div>");
  1145. });
  1146. //console.log(JSON.stringify(answerData));
  1147. return answerData;
  1148. }
  1149. //回填所有答案,answerJson:所有作答及参考答案List,statusType:0-可作答,1-已提交,2-查看评阅
  1150. function backupAllAnswer(answerJson, statusType) {
  1151. if (answerJson != "" && answerJson) {
  1152. var answerList = JSON.parse(answerJson);
  1153. $.each($(".answer-body"), function (num, item) {
  1154. //查找
  1155. var index = 0;
  1156. var answerid = $(item).attr("answer-id");
  1157. for (var i = 0; i < answerList.length; i++) {
  1158. if (answerid == answerList[i].Id) {
  1159. index = i;
  1160. break;
  1161. }
  1162. }
  1163. //提交直接还原作答现场
  1164. var mytext = answerList[index].Text;//我的答案
  1165. answerList[index].IsKY = $(item).attr("answer-isky");//是否是口语试题,0-不是口语题,1-是口语题
  1166. //添加音频控制
  1167. var hasAudio = false;
  1168. var audioElement = $(item).children(".answer-audio-range").children("img").eq(0);
  1169. if ((answerList[index].Type == 3 || answerList[index].Type == 4) && answerList[index].AudioUrl != "") {
  1170. hasAudio = true;
  1171. $(item).children(".answer-point-range").hide();
  1172. $(item).children(".answer-audio-range").css("display", "inline-block");
  1173. $(item).children(".answer-audio-range").children("span").text("作答音频(" + answerList[index].AudioLength + "s)");
  1174. //填充作答内容
  1175. $(item).attr("answer-text", mytext);
  1176. if (mytext != "") {
  1177. mytext = "(" + mytext + ")";
  1178. $(item).children(".answer-text").show();
  1179. $(item).children(".answer-text").text(mytext);
  1180. }
  1181. //音频节点
  1182. $(audioElement).attr("src", PicInfo.recordPlayImgUrl);
  1183. $(item).attr("answer-url", answerList[index].AudioUrl);
  1184. $(item).children(".answer-audio-range").attr("play-status", "0");
  1185. //独立绑定事件
  1186. $(audioElement).on("click", function () {
  1187. recordAudioClick(this, answerList[index].Id, answerList[index].AudioUrl);
  1188. });
  1189. }
  1190. //可作答状态,作答还原
  1191. if (statusType == 0) {
  1192. //已作答过,还原作答,增加作答后的UI节点
  1193. if ((answerList[index].Type == 3 || answerList[index].Type == 4) && answerList[index].AudioUrl != "") {
  1194. $(item).children(".answer-audio-range").children("span").on("click", function () {
  1195. $(".answer-body").removeClass("select-answer");
  1196. $(item).addClass("select-answer");
  1197. onClickAnswerPoint(JSON.stringify(answerList[index]));
  1198. });
  1199. }
  1200. else {
  1201. $(item).attr("answer-text", mytext);//填充作答内容
  1202. if (mytext != "") {
  1203. $(item).children(".answer-text").show();
  1204. $(item).children(".answer-point-range").hide();
  1205. $(item).children(".answer-text").text(mytext);
  1206. }
  1207. }
  1208. }
  1209. //已提交,作答还原
  1210. if (statusType == 1) {
  1211. //取消点击绑定事件
  1212. $(item).unbind('click');
  1213. //填充作答内容
  1214. $(item).attr("answer-text", mytext);
  1215. if (mytext == "" && !hasAudio) {
  1216. mytext = "未作答";
  1217. $(item).children(".answer-text").show();
  1218. $(item).children(".answer-text").text(mytext);
  1219. $(item).children(".answer-text").addClass("no-answer");
  1220. }
  1221. else if (mytext == "" && hasAudio) {
  1222. $(item).children(".answer-text").hide();
  1223. }
  1224. else {
  1225. $(item).children(".answer-text").show();
  1226. $(item).children(".answer-text").text(mytext);
  1227. }
  1228. $(item).children(".answer-point-range").hide();
  1229. }
  1230. //已评阅,查看评阅详情
  1231. if (statusType == 2) {
  1232. //添加音频控制
  1233. if ((answerList[index].Type == 3 || answerList[index].Type == 4) && answerList[index].AudioUrl != "") {
  1234. //独立绑定事件
  1235. $(item).children(".answer-audio-range").children("span").on("click", function () {
  1236. $(".answer-body").removeClass("select-answer");
  1237. $(item).addClass("select-answer");
  1238. onClickAnswerPoint(JSON.stringify(answerList[index]));
  1239. });
  1240. }
  1241. else {
  1242. $(item).attr("answer-text", mytext);//填充作答内容
  1243. if (mytext == "" && !hasAudio) {
  1244. mytext = "未作答";
  1245. $(item).children(".answer-text").show();
  1246. $(item).children(".answer-text").text(mytext);
  1247. $(item).children(".answer-text").addClass("no-answer");
  1248. }
  1249. else if (mytext == "" && hasAudio) {
  1250. $(item).children(".answer-text").hide();
  1251. }
  1252. else {
  1253. $(item).children(".answer-text").show();
  1254. $(item).children(".answer-text").text(mytext);
  1255. }
  1256. $(item).children(".answer-point-range").hide();
  1257. }
  1258. //评阅样式
  1259. if (answerList[index].Score == 0 && answerList[index].Text != "") {
  1260. $(item).children(".answer-text").addClass("bad-answer");
  1261. }
  1262. if (answerList[index].Score > 0) {
  1263. $(item).children(".answer-text").addClass("good-answer");
  1264. }
  1265. }
  1266. // 添加answer-boy的样式判断
  1267. var DStatusFlag = $(item).find(".answer-point-range").css("display") != "none";
  1268. if (DStatusFlag) {
  1269. $(item).attr("answer-showanswer", "0"); // 修改显示格式
  1270. }
  1271. else {
  1272. $(item).attr("answer-showanswer", "1"); // 修改显示格式
  1273. }
  1274. });
  1275. //打勾题的还原
  1276. $.each($(".checkbox"), function (num, item) {
  1277. //可作答状态,作答还原
  1278. //查找
  1279. var index = 0;
  1280. var answerid = $(item).attr("answer-id");
  1281. var parentid = $(item).attr("parent-anid");
  1282. for (var i = 0; i < answerList.length; i++) {
  1283. if (answerid == answerList[i].Id) {
  1284. index = i;
  1285. break;
  1286. }
  1287. }
  1288. //提交直接还原作答现场
  1289. var mytext = answerList[index].Text;//我的答案
  1290. var ischecked = mytext.indexOf("√") > -1;
  1291. var answerText = $(item).attr("answer-anstext");//参考答案
  1292. $(item).attr("answer-text", mytext);
  1293. $(item).find('input').prop('checked', ischecked);
  1294. //已提交,已评阅,还原HTML代码,去除checkbox
  1295. if (statusType == 1 || statusType == 2) {
  1296. mytext = mytext == "" ? "__" : mytext;
  1297. $(item).prop("outerHTML", "<div class='answer-body' answer-id='" + answerid + "' parent-anid='" + parentid + "' answer-anstext='" + answerText + "' answer-isky='2' answer-text='" + mytext + "'><div class='answer-audio-range'><img src='" + PicInfo.recordPlayImgUrl + "'/><span class='answer-audio-text'>作答音频</span></div><div class='answer-point-range' style='display:none;'><img src='" + PicInfo.answerPointImgUrl + "'/><span class='answer-point-text'>答题点</span></div><buttom class='answer-text' style='display:block;'>" + mytext + "</buttom></div>");
  1298. }
  1299. });
  1300. //点击事件重新绑定
  1301. if (statusType == 0 || statusType == 2) {
  1302. $(".answer-body").unbind("click").on("click", function () {
  1303. var curObj = new Object();
  1304. curObj.Id = $(this).attr("answer-id");//答题点ID
  1305. curObj.pId = $(this).attr("parent-anid");//答题点ID
  1306. curObj.IsKY = $(this).attr("answer-isky");//是否是口语试题,0-不是口语题,1-是口语题
  1307. curObj.Text = $(this).attr("answer-text");//用户作答内容
  1308. curObj.Score = $(this).attr("answer-score");//作答评分
  1309. curObj.AnsText = $(this).attr("answer-anstext");//参考答案
  1310. curObj.Comment = $(this).attr("answer-comment");//评语
  1311. curObj.pId = curObj.pId ? curObj.pId : curObj.Id;//组ID
  1312. $(".checkbox").removeClass("select-answer");
  1313. $(".answer-body").removeClass("select-answer");
  1314. $(this).addClass("select-answer");
  1315. //已作答,弹出作答答案
  1316. if ($(this).data("ans-status") == "1") {
  1317. //移动端添加外部处理
  1318. onClickAnswerPoint(JSON.stringify(curObj));
  1319. }
  1320. else {
  1321. //移动端添加外部处理,弹出作答操作
  1322. onClickAnswerPoint(JSON.stringify(curObj));
  1323. }
  1324. });
  1325. }
  1326. }
  1327. }
  1328. //老师评阅学生作答
  1329. function reviewStuAnswer(answerJson) {
  1330. if (answerJson != "" && answerJson) {
  1331. var answerObj = JSON.parse(answerJson);
  1332. var selectElement = $(".answer-body[answer-id='" + answerObj.Id + "']");
  1333. //$(selectElement).attr("answer-text", answerObj.Text);//用户作答内容
  1334. $(selectElement).attr("answer-score", answerObj.Score);//作答评分
  1335. $(selectElement).attr("answer-anstext ", answerObj.AnsText);//参考答案
  1336. $(selectElement).attr("answer-comment", answerObj.Comment);//评语
  1337. //评阅样式
  1338. if (answerObj.Score == 0) {
  1339. $(selectElement).children(".answer-text").removeClass("good-answer");
  1340. $(selectElement).children(".answer-text").addClass("bad-answer");
  1341. }
  1342. if (answerObj.Score > 0) {
  1343. $(selectElement).children(".answer-text").removeClass("bad-answer");
  1344. $(selectElement).children(".answer-text").addClass("good-answer");
  1345. }
  1346. }
  1347. }
  1348. //回填所有评阅信息,answerJson:所有作答及参考答案评阅信息List
  1349. function backupAllReview(answerJson) {
  1350. if (answerJson != "" && answerJson) {
  1351. var answerList = JSON.parse(answerJson);
  1352. $.each($(".answer-body"), function (num, item) {
  1353. //查找
  1354. var index = 0;
  1355. var answerid = $(item).attr("answer-id");
  1356. for (var i = 0; i < answerList.length; i++) {
  1357. if (answerid == answerList[i].Id) {
  1358. index = i;
  1359. break;
  1360. }
  1361. }
  1362. //$(item).attr("answer-id", answerList[index].Id);//答题点ID
  1363. //$(item).attr("answer-text", answerList[index].Text);//用户作答内容
  1364. $(item).attr("answer-score", answerList[index].Score);//作答评分
  1365. $(item).attr("answer-anstext ", answerList[index].AnsText);//参考答案
  1366. $(item).attr("answer-comment", answerList[index].Comment);//评语
  1367. //提交直接还原作答现场
  1368. var mytext = answerList[index].Text;//我的答案
  1369. var audioElement = $(item).children(".answer-audio-range").children("img").eq(0);
  1370. if ((answerList[index].Type == 3 || answerList[index].Type == 4) && answerList[index].AudioUrl != "") {
  1371. $(item).children(".answer-point-range").hide();
  1372. $(item).children(".answer-audio-range").css("display", "inline-block");
  1373. $(item).children(".answer-audio-range").children("span").text("作答音频(" + answerList[index].AudioLength + "s)");
  1374. //填充作答内容
  1375. $(item).attr("answer-text", mytext);
  1376. if (mytext != "") {
  1377. mytext = "(" + mytext + ")";
  1378. $(item).children(".answer-text").show();
  1379. $(item).children(".answer-text").text(mytext);
  1380. }
  1381. //是否之前存在作答音频
  1382. $(audioElement).attr("src", PicInfo.recordPlayImgUrl);
  1383. $(item).attr("answer-url", answerList[index].AudioUrl);
  1384. $(item).children(".answer-audio-range").attr("play-status", "0");
  1385. //独立绑定事件
  1386. $(audioElement).on("click", function () {
  1387. recordAudioClick(this, answerList[index].Id, answerList[index].AudioUrl);
  1388. });
  1389. $(item).children(".answer-audio-range").children("span").on("click", function () {
  1390. $(".answer-body").removeClass("select-answer");
  1391. $(item).addClass("select-answer");
  1392. onClickAnswerPoint(JSON.stringify(answerList[index]));
  1393. });
  1394. }
  1395. else {
  1396. $(item).attr("answer-text", mytext);//填充作答内容
  1397. if (mytext == "") {
  1398. mytext = "未作答";
  1399. $(item).children(".answer-text").addClass("no-answer");
  1400. }
  1401. $(item).children(".answer-text").show();
  1402. $(item).children(".answer-text").text(mytext);
  1403. $(item).children(".answer-point-range").hide();
  1404. }
  1405. //评阅样式
  1406. if (answerList[index].Score == 0) {
  1407. $(item).children(".answer-text").addClass("bad-answer");
  1408. }
  1409. if (answerList[index].Score > 0) {
  1410. $(item).children(".answer-text").addClass("good-answer");
  1411. }
  1412. });
  1413. //打勾题的还原
  1414. $.each($(".checkbox"), function (num, item) {
  1415. //查找
  1416. var index = 0;
  1417. var answerid = $(item).attr("answer-id");
  1418. var parentid = $(item).attr("parent-anid");
  1419. for (var i = 0; i < answerList.length; i++) {
  1420. if (answerid == answerList[i].Id) {
  1421. index = i;
  1422. break;
  1423. }
  1424. }
  1425. //提交直接还原作答现场
  1426. var mytext = answerList[index].Text;//我的答案
  1427. var ischecked = mytext.indexOf("√") > -1;
  1428. var answerText = $(item).attr("answer-anstext");//参考答案
  1429. mytext = mytext == "" ? "__" : mytext;
  1430. $(item).prop("outerHTML", "<div class='answer-body' answer-id='" + answerid + "' parent-anid='" + parentid + "' answer-anstext='" + answerText + "' answer-isky='2' answer-text='" + mytext + "'><div class='answer-audio-range'><img src='" + PicInfo.recordPlayImgUrl + "'/><span class='answer-audio-text'>作答音频</span></div><div class='answer-point-range' style='display:none;'><img src='" + PicInfo.answerPointImgUrl + "'/><span class='answer-point-text'>答题点</span></div><buttom class='answer-text' style='display:block;'>" + mytext + "</buttom></div>");
  1431. });
  1432. //点击事件重新绑定
  1433. $(".answer-body").unbind("click").on("click", function () {
  1434. var curObj = new Object();
  1435. curObj.Id = $(this).attr("answer-id");//答题点ID
  1436. curObj.pId = $(this).attr("parent-anid");//答题点ID
  1437. curObj.IsKY = $(this).attr("answer-isky");//是否是口语试题,0-不是口语题,1-是口语题
  1438. curObj.Text = $(this).attr("answer-text");//用户作答内容
  1439. curObj.Score = $(this).attr("answer-score");//作答评分
  1440. curObj.AnsText = $(this).attr("answer-anstext");//参考答案
  1441. curObj.Comment = $(this).attr("answer-comment");//评语
  1442. curObj.pId = curObj.pId ? curObj.pId : curObj.Id;//组ID
  1443. $(".checkbox").removeClass("select-answer");
  1444. $(".answer-body").removeClass("select-answer");
  1445. $(this).addClass("select-answer");
  1446. //已作答,弹出作答答案
  1447. if ($(this).data("ans-status") == "1") {
  1448. //移动端添加外部处理
  1449. onClickAnswerPoint(JSON.stringify(curObj));
  1450. }
  1451. else {
  1452. //移动端添加外部处理,弹出作答操作
  1453. onClickAnswerPoint(JSON.stringify(curObj));
  1454. }
  1455. });
  1456. }
  1457. }
  1458. //处理播放录音,answerid:答题点ID,isPlay:是否播放(0-暂停,1-播放)
  1459. function playRecordAudio(answerid, isPlay) {
  1460. //获取其他正在播放的音频
  1461. var playing = $(".answer-body[answer-id='" + answerid + "']").children(".answer-audio-range");
  1462. if (playing.length > 0) {
  1463. if (isPlay == "1") {
  1464. $(playing).attr("play-status", "1");
  1465. $(playing).find("img").attr("src", PicInfo.recordPauseImgUrl);//移动端要根据本地路径替换
  1466. }
  1467. else {
  1468. $(playing).attr("play-status", "0");
  1469. $(playing).find("img").attr("src", PicInfo.recordPlayImgUrl);//移动端要根据本地路径替换
  1470. }
  1471. }
  1472. }
  1473. //滚动到相应DIV
  1474. function scrollAnswer(answerid) {
  1475. //console.log(answerid);
  1476. $(".checkbox").removeClass("select-answer");
  1477. $(".answer-body").removeClass("select-answer");
  1478. var ansDom = $(".answer-body[parent-anid='" + answerid + "']");
  1479. if (ansDom.length == 0) {
  1480. ansDom = $(".checkbox[parent-anid='" + answerid + "']");
  1481. }
  1482. $(ansDom).addClass("select-answer");
  1483. var scroll_offset = $(ansDom).offset(); //得到box这个div层的offset,包含两个值,top和left
  1484. var offset_top = scroll_offset.top;
  1485. if (offset_top > 150) {
  1486. offset_top = offset_top - 200;
  1487. }
  1488. $("body,html").animate({
  1489. scrollTop: offset_top //让body的scrollTop等于pos的top,就实现了滚动
  1490. });
  1491. }
  1492. //暂停播放原文音频
  1493. function pauseTextAudio(audioid) {
  1494. //获取其他正在播放的音频
  1495. var playing = $(".audioImg[audio-id='" + audioid + "']");
  1496. if (playing.length > 0) {
  1497. $(playing).attr("play-status", "0");
  1498. $(playing).attr("src", PicInfo.audioPauseImgUrl);//移动端要根据本地 喇叭 路径替换
  1499. }
  1500. }
  1501. //原文音频播放按钮点击事件
  1502. function audioPlayClick(myobj) {
  1503. var curHtml = $(myobj).parent().find(".audioUrl").html();
  1504. var curAlt = $(myobj).attr("alt");
  1505. //处理当前按钮的状
  1506. if ($(myobj).attr("play-status") == "1") {
  1507. $(myobj).attr("play-status", "0");
  1508. $(myobj).attr("src", PicInfo.audioPauseImgUrl);//移动端要根据本地 喇叭 路径替换
  1509. }
  1510. else {
  1511. //停止其他作答音频播放
  1512. var isRecordPlaying = $(".answer-audio-range[play-status='1']");
  1513. if (isRecordPlaying.length > 0) {
  1514. $(isRecordPlaying).attr("play-status", "0");
  1515. $(isRecordPlaying).find("img").attr("src", PicInfo.recordPlayImgUrl);//移动端要根据本地路径替换
  1516. }
  1517. //停止其他原文音频播放
  1518. var audioPlaying = $(".audioImg[play-status='1']");
  1519. if (audioPlaying.length > 0) {
  1520. $(audioPlaying).attr("play-status", "0");
  1521. $(audioPlaying).attr("src", PicInfo.audioPauseImgUrl);//移动端要根据本地 喇叭 路径替换
  1522. }
  1523. //设置播放状态
  1524. $(myobj).attr("play-status", "1");
  1525. $(myobj).attr("src", PicInfo.audioPlayImgUrl);//移动端要根据本地 喇叭 路径替换
  1526. }
  1527. var info = new Object();
  1528. info.Id = $(myobj).attr("audio-id");
  1529. info.AudioUrl = curAlt;
  1530. //移动端添加外部处理
  1531. playVisiableAudioCallBack(1, JSON.stringify(info));
  1532. }
  1533. //作答录音播放按钮点击事件
  1534. function recordAudioClick(myobj, id, url) {
  1535. //处理当前按钮的状态
  1536. if ($(myobj).parent().attr("play-status") == "0") {
  1537. //停止其他作答音频播放
  1538. var isRecordPlaying = $(".answer-audio-range[play-status='1']");
  1539. if (isRecordPlaying.length > 0) {
  1540. $(isRecordPlaying).attr("play-status", "0");
  1541. $(isRecordPlaying).find("img").attr("src", PicInfo.recordPlayImgUrl);//移动端要根据本地路径替换
  1542. }
  1543. //停止其他原文音频播放
  1544. var audioPlaying = $(".audioImg[play-status='1']");
  1545. if (audioPlaying.length > 0) {
  1546. $(audioPlaying).attr("play-status", "0");
  1547. $(audioPlaying).attr("src", PicInfo.recordPlayImgUrl);//移动端要根据本地 喇叭 路径替换
  1548. }
  1549. //设置播放状态
  1550. $(myobj).parent().attr("play-status", "1");
  1551. $(myobj).attr("src", PicInfo.recordPauseImgUrl);//移动端要根据本地路径替换
  1552. }
  1553. else {
  1554. $(myobj).parent().attr("play-status", "0");
  1555. $(myobj).attr("src", PicInfo.recordPlayImgUrl);//移动端要根据本地路径替换
  1556. }
  1557. //移动端添加外部处理,播放录音
  1558. var info = new Object();
  1559. info.Id = id;
  1560. info.AudioUrl = url;
  1561. //移动端添加外部处理,播放录音
  1562. playVisiableAudioCallBack(3, JSON.stringify(info));
  1563. }
  1564. //生成从minNum到maxNum的随机数
  1565. function randomNum(minNum, maxNum) {
  1566. switch (arguments.length) {
  1567. case 1:
  1568. return parseInt(Math.random() * minNum + 1, 10);
  1569. break;
  1570. case 2:
  1571. return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
  1572. break;
  1573. default:
  1574. return 0;
  1575. break;
  1576. }
  1577. }
  1578. function playVisiableAudioCallBack(type, url) {
  1579. //console.log(url);
  1580. cancelBubble();
  1581. plugin.startPlay(type, url);
  1582. }
  1583. function onClickAnswerPoint(data) {
  1584. //alert(JSON.stringify(data));
  1585. console.log(JSON.stringify(data));
  1586. cancelBubble();
  1587. plugin.onClickAnswerPoint(data);
  1588. }
  1589. function onClickKeyHide() {
  1590. //alert(JSON.stringify(data));
  1591. cancelBubble();
  1592. plugin.onClickKeyHide();
  1593. }
  1594. function cancelBubble(e) {
  1595. var evt = e ? e : window.event;
  1596. if (evt.stopPropagation) { //W3C
  1597. evt.stopPropagation();
  1598. } else { //IE
  1599. evt.cancelBubble = true;
  1600. }
  1601. }
  1602. function getSelectedText(title) {
  1603. var txt;
  1604. if (window.getSelection) {
  1605. txt = window.getSelection().toString();
  1606. } else if (window.document.getSelection) {
  1607. txt = window.document.getSelection().toString();
  1608. } else if (window.document.selection) {
  1609. txt = window.document.selection.createRange().text;
  1610. }
  1611. JSInterface.callback(txt, title);
  1612. }