人教电子教材显示书名

显示书名

  1. // ==UserScript==
  2. // @name 人教电子教材显示书名
  3. // @namespace http://tampermonkey.net/
  4. // @version 2025.4.17
  5. // @description 显示书名
  6. // @author AN drew
  7. // @match https://jc.pep.com.cn/*
  8. // @require https://lib.baomitu.com/jquery/3.5.0/jquery.min.js
  9. // @grant GM_addStyle
  10. // ==/UserScript==
  11.  
  12. //从后往前查找并替换第一个匹配的子串
  13. function replaceLast1(str, search, replacement) {
  14. const regex = new RegExp(search, 'g');
  15. let match;
  16. let lastMatchIndex = -1;
  17.  
  18. // 遍历所有匹配项,记录最后一个匹配的位置
  19. while ((match = regex.exec(str)) !== null) {
  20. lastMatchIndex = match.index;
  21. }
  22.  
  23. // 未找到匹配项
  24. if (lastMatchIndex === -1) return str;
  25.  
  26. // 替换最后一个匹配项
  27. return (
  28. str.slice(0, lastMatchIndex) +
  29. replacement +
  30. str.slice(lastMatchIndex + search.length)
  31. );
  32. }
  33.  
  34. //从后往前查找并替换第一个匹配的子串
  35. function replaceLast2(str, search, replacement) {
  36.  
  37. // 转义搜索字符串中的特殊正则字符
  38. const escapedSearch = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
  39.  
  40. // 构造匹配最后一个子串的正则
  41. const regex = new RegExp(`(.*)${escapedSearch}`);
  42.  
  43. // 替换匹配到的最后一个子串
  44. return str.replace(regex, (_, p1) => p1 + replacement);
  45. }
  46.  
  47. //从后往前查找并替换第一个匹配的子串
  48. function replaceLast3(str, search, replacement) {
  49.  
  50. // 查找目标子串在原始字符串中的最后一个出现位置
  51. const index = str.lastIndexOf(search);
  52.  
  53. // 如果存在匹配项(index !== -1)
  54. if (index !== -1) {
  55.  
  56. // 拼接三部分:原始字符串前半段 + 替换内容 + 原始字符串后半段
  57. return (
  58. str.substring(0, index) +
  59. replacement +
  60. str.substring(index + search.length)
  61. );
  62. }
  63. return str;
  64. }
  65.  
  66.  
  67. function convert(title) {
  68.  
  69. //将(A版)从末尾移动到'数学'之后
  70. if(title.indexOf('普通高中教科书数学')>-1)
  71. {
  72. title = title.replace(/^(普通高中教科书数学)(.*?册)((.*版))$/, "$1$3$2");
  73. }
  74.  
  75. //选择性必修[0-9]换行
  76. if(title.indexOf('选择性必修')>-1)
  77. {
  78. title = title.replace(/选择性必修\d?/g, '$&<br>');
  79. }
  80. //必修[0-9]换行
  81. else if(title.indexOf('必修')>-1 && title.indexOf('必修<br>')==-1)
  82. {
  83. title = title.replace(/必修\d?/g, '$&<br>');
  84. }
  85.  
  86. //低视力版 信息技术 部分标题缺少'(供低视力学生使用)'
  87. if(title.indexOf('盲校义务教育实验教科书 信息技术')>-1 && title.indexOf('(盲文版)')==-1&& title.indexOf('(供低视力学生使用)')==-1)
  88. {
  89. title += '(供低视力学生使用)';
  90. }
  91.  
  92. //只在'X年级 (上/下)册'加空格,'(X年级起点)'不加
  93. if(title.indexOf('年级')>-1)
  94. {
  95. title = replaceLast3(title, '年级', '年级 ');
  96. }
  97.  
  98. const replacements = [
  99. ['语文', '语文<br>'],
  100. ['数学', '数学<br>'],
  101. ['英语', '英语<br>'],
  102. ['日语', '日语<br>'],
  103. ['俄语', '俄语<br>'],
  104. ['道德与法治', '道德与法治<br>'],
  105. ['思想政治', '思想政治<br>'],
  106. ['历史', '历史<br>'],
  107. ['地理', '地理<br>'],
  108. ['物理', '物理<br>'],
  109. ['化学', '化学<br>'],
  110. ['生物学', '生物学<br>'],
  111. ['音乐', '音乐<br>'],
  112. ['美术', '美术<br>'],
  113. ['艺术', '艺术<br>'],
  114. ['美工', '美工<br>'],
  115. ['体育与健康', '体育与健康<br>'],
  116. ['信息技术', '信息技术<br>'],
  117. ['通用技术', '通用技术<br>'],
  118. ['科学', '科学<br>'],
  119. ['影视', '影视<br>'],
  120. ['戏剧', '戏剧<br>'],
  121. ['舞蹈', '舞蹈<br>'],
  122. ['沟通与交往', '沟通与交往<br>'],
  123. ['生活适应', '生活适应<br>'],
  124. ['必修<br>上册', '必修 上册'],
  125. ['必修<br>中册', '必修 中册'],
  126. ['必修<br>下册', '必修 下册'],
  127. ['必修<br>第一册', '必修 第一册'],
  128. ['必修<br>第二册', '必修 第二册'],
  129. ['必修<br>第三册', '必修 第三册'],
  130. ['必修<br>第四册', '必修 第四册'],
  131. ['中外历史纲要上', '中外历史纲要 上'],
  132. ['中外历史纲要下', '中外历史纲要 下'],
  133. ['社会主义思想', '社会主义思想<br>'],
  134. ['小学低年级', '小学 低年级'],
  135. ['小学高年级', '小学 高年级'],
  136. ['影视<br>与数字媒体艺术实践', '影视与数字媒体艺术实践<br>'],
  137. ['戏剧<br>创编与表演', '戏剧创编与表演<br>'],
  138. ['舞蹈<br>创编与表演', '舞蹈创编与表演<br>'],
  139. ['音乐<br>情境表演', '音乐情境表演<br>'],
  140. ['美术<br>创意实践', '美术创意实践<br>'],
  141. ['手册', '手册<br>'],
  142. ['读本', '读本<br>'],
  143. ['教科书', '教科书<br>'],
  144. ['教师用书', '教师用书<br>'],
  145. ['选修课程用书', '选修课程用书<br>'],
  146. ['低视力版', '低视力版<br>'],
  147. ['(五线谱)', '<br>(五线谱)'],
  148. ['(简谱)', '<br>(简谱)'],
  149. ['起点)', '起点)<br>'],
  150. ['(精通)', '(精通)<br>'],
  151. ['(PEP)', '(PEP)<br>'],
  152. ['(A版)', '(A版)<br>'],
  153. ['(B版)', '(B版)<br>'],
  154. ['(上册)', '<br>(上册)'],
  155. ['(下册)', '<br>(下册)'],
  156. ['(盲文版)', '<br>(盲文版)'],
  157. ['(五·四学制)', '(五·四学制)<br>'],
  158. ['(供低视力学生使用)', '<br>(供低视力学生使用)']
  159. ];
  160.  
  161. replacements.forEach(([search, repl]) => {
  162. title = title.replace(search, repl);
  163. });
  164.  
  165. return title;
  166. }
  167.  
  168.  
  169. (function() {
  170. 'use strict';
  171.  
  172. GM_addStyle(`
  173. .page_pc .page_pc_btm .page_pc_btm_period .page_pc_btm_period_body .page_pc_btm_period_body_type:nth-of-type(1) .body_type {
  174. display: grid;
  175. }
  176.  
  177. .page_pc .page_pc_btm .page_pc_btm_period .page_pc_btm_period_body .page_pc_btm_period_body_type .body_type .item {
  178. height: 30px;
  179. margin-bottom: 5px;
  180. }
  181.  
  182. .page_pc_btm_book_body {
  183. height: auto !important
  184. }
  185.  
  186. .page_pc_btm_book_body .name {
  187. margin: 0px 14px;
  188. padding: 8px;
  189. font-weight: bold;
  190. font-family: 楷体, 隶书, cursive;
  191. font-size: 22px;
  192. text-align: center;
  193. line-height: 1.5;
  194. }
  195.  
  196. .page_pc_btm_book_body .read {
  197. margin: 5px 0px 20px 20px !important
  198. }
  199.  
  200. .textbook .item {
  201. height: auto !important
  202. }
  203.  
  204. .textbook .item .name {
  205. margin: 0px 14px;
  206. padding: 8px;
  207. font-weight: bold;
  208. font-family: 楷体, 隶书, cursive;
  209. font-size: 22px;
  210. text-align: center;
  211. line-height: 1.5;
  212. }
  213.  
  214. .textbook .item .read {
  215. margin-top: 5px !important
  216. }
  217. `);
  218.  
  219. let t=setInterval(function(){
  220. //PC端
  221. if($('.page_pc_btm_book_body').length>0)
  222. {
  223. $('.page_pc_btm_book_body').each(function(){
  224. //教材封面存在
  225. if($(this).find('.imga').length>0)
  226. {
  227. //教材名称不存在,添加名称
  228. if($(this).find('.name').length==0)
  229. {
  230. let title=$(this).find('.imga').attr('title');
  231. title=convert(title);
  232. $(this).find('.imga').after('<div class="name">'+title+'</div>');
  233. }
  234. //切换科目时,改变名称
  235. else
  236. {
  237. let old_title=$(this).find('.name').html();
  238. let new_title=$(this).find('.imga').attr('title');
  239. new_title=convert(new_title);
  240. if(old_title != new_title)
  241. {
  242. $(this).find('.name').html(new_title);
  243. }
  244. }
  245. }
  246. });
  247. }
  248. //手机端
  249. if($('.textbook .item').length>0)
  250. {
  251. $('.textbook .item').each(function(){
  252. //教材封面存在
  253. if($(this).find('.cover').length>0)
  254. {
  255. //教材名称不存在,添加名称
  256. if($(this).find('.name').length==0)
  257. {
  258. let title=$(this).find('.cover').attr('alt');
  259. title=convert(title);
  260. $(this).find('.cover').after('<div class="name">'+title+'</div>');
  261. }
  262. //切换科目时,改变名称
  263. else
  264. {
  265. let old_title=$(this).find('.name').html();
  266. let new_title=$(this).find('.cover').attr('alt');
  267. new_title=convert(new_title);
  268. if(old_title != new_title)
  269. {
  270. $(this).find('.name').html(new_title);
  271. }
  272. }
  273. }
  274. });
  275. }
  276. },1000);
  277.  
  278. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址