tasklib_book.js 63 KB

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