tasklib_book.js 76 KB

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