【MOOC】JS脚本|便于复制粘贴中国大学MOOC网站的测试题和选项
文章目录
运行结果
添加三个按钮,DEL删除多余元素,(刷新复原)
COPY一键复制所有题目和选项的文本至剪切板中,暂不支持图片复制。(不记录正确答案)
鼠标移至文字上方即可显示“复制”、“必应搜索”两个按钮。
DISABLE可以禁用“复制”、“必应搜索”避免影响做题,禁用后将变成ABLE按钮。
可以用"x"关闭按钮,关闭后会变成"s",再次点击按钮会重现。
下图是个GIF图,如果不会动,请右键在新标签页打开它。
完整代码
具体代码有点长,就不贴了,下面记录部分实现细节。
可复用的部分
1. 删除指定Class或Id的DOM元素
function delAll(){
var delClass=["qaCate","m-nav-container","scoreLabel","m-learnhead","m-learnleft","totalScore","u-learn-moduletitle","j-activityBanner","j-activityBanner"],i,j;
var delId=['j-activityBanner'];
//注意倒序删除,先删除前面的结点时,js会自动补全dom列表
for(i=delClass.length-1;i>=0;i--)
{
let list=document.getElementsByClassName(delClass[i]);
for(j=list.length-1;j>=0;j--)
{
list[j].remove();
}
}
for(i=delId.length-1;i>=0;i--)
{
let dom=document.getElementById(delId[i]);
dom.remove();
}
}
2. 在页面上添加按钮并绑定事件、添加css、class
function createAButton(element,value,onclick,css,cla="temp"){
var Button = document.createElement("input");
Button.type="button";
Button.value=value;
Button.onclick=onclick;
Button.setAttribute("style",css) ;
Button.setAttribute("class",cla) ;
element.appendChild(Button);
return Button;
}
3. 等待页面加载完成,运行异步函数
function Func(){
var p1 = new Promise(usualFunc);
//Func(resolve,reject),resolve返回到then,reject返回到catch
p1.then(function (result) {
//code here.
});
}
async function mainFunc(){
await Func();
}
var oldonload = window.onload;
if(typeof window.onload !='function'){
window.onload = mainFunc;
}else{
window.onload = function(){
oldonload();
mainFunc();
}
4. 选中某个DOM元素的文本并复制
默认不移除被复制节点
function selectText(element) {
if (document.createRange) {
let range = document.createRange();
range.selectNodeContents(element);
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
} else {
alert('none');
}
}
function copyAll(element,del=0){
selectText(element);
if (document.execCommand('copy')) {
Toast("复制成功",500);
if(del){
element.remove();
}
}
}
5. 数组去重(ES6支持)
function unique (arr) {
return Array.from(new Set(arr))
}
6. 递归获得特定Class或者Id的子节点
var childList=[];
function getDeepChildByOrder(limit){
let copyClass=["position","f-richEditorText","optionPos"],i,j;
let copyId=[];
var child=limit.children;
for(i=0;i<child.length;i++){
for(j=0;j<copyClass.length;j++){
if(child[i].className.includes(copyClass[j])){
childList.push(child[i]);
//console.log(child[i].innerText);
}
}
for(j=0;j<copyId.length;j++){
if(child[i].id==copyId[i]){
childList.push(child[i]);
//console.log(child[i]);
}
}
if(child[i].children){
getDeepChildByOrder(child[i]);
}
}
}
7. 向DOM元素中追加文本(包括\n换行)
换行用<br>
元素实现。
function addTextWithBR(element,str){
var textNode,i;
str=str.split(/[\n]/);//分割字符串
for(i=0;i<str.length;i++){
textNode=document.createTextNode(str[i]);
element.appendChild(textNode);
//注:appendChild不能通过重复调用添加两个相同节点
//所以最好重新定义一个br节点添加
//注2:为保证换行的正确性,最后一个分割字符串末尾不需要加换行
if(i!=str.length-1){
let br=document.createElement('br');
element.appendChild(br);
}
}
}
8. Toast实现(轻弹窗)
function Toast(msg, duration) {
duration = isNaN(duration) ? 3000 : duration;
var m = document.createElement('div');
m.innerHTML = msg;
m.style.cssText = "font-family:siyuan;max-width:60%;min-width: 150px;padding:0 14px;height: 40px;color: rgb(255, 255, 255);line-height: 40px;text-align: center;border-radius: 4px;position: fixed;top: 50%;left: 50%;transform: translate(-50%, -50%);z-index: 999999;background: rgba(0, 0, 0,.7);font-size: 16px;";
document.body.appendChild(m);
setTimeout(function() {
var d = 0.5;
m.style.webkitTransition = '-webkit-transform ' + d + 's ease-in, opacity ' + d + 's ease-in';
m.style.opacity = '0';
setTimeout(function() {
document.body.removeChild(m)
}, d * 1000);
}, duration);
}
9. sleep函数以及正确使用方式
function sleep (time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
async function Func(){
await sleep(1000);
console.log('结合async使用就不至于阻塞');
}
Func();
10. forEach不能对空数组遍历
以上便是本次代码的所有需求和难点。
【MOOC】JS脚本|便于复制粘贴中国大学MOOC网站的测试题和选项的更多相关文章
- 中国大学MOOC课程信息爬取与数据存储
版权声明:本文为博主原创文章,转载 请注明出处: https://blog.csdn.net/sc2079/article/details/82016583 10月18日更:MOOC课程信息D3.js ...
- 【python】下载中国大学MOOC的视频
[python]下载中国大学MOOC的视频 脚本目标: 输入课程id和cookie下载整个课程的视频文件,方便复习时候看 网站的反爬机制分析: 分析数据包的目的:找到获取m3u8文件的路径 1. 从第 ...
- 中国大学MOOC中的后台文件传输
早期版本的中国大学MOOC一旦被挂起后,应用在完成当前下载任务后无法继续添加新任务,当然也无法将缓存状态写入数据库.这个问题能否顺利解决直接关系到用户体验. 顺便吐槽下,凡是使用了后台文件传输还提示你 ...
- Cocos Creator JS web平台复制粘贴代码(亲测可用)
Cocos Creator JS web平台复制粘贴代码(亲测可用) 1 webCopyString: function(str){ var input = str; const el = docum ...
- 中国大学mooc直播回放看这里哦http://www.icourse163.org/forum/1001974001/topic-1003372881.htm?sortType=1&pageIndex=1
中国大学mooc直播回放看这里哦http://www.icourse163.org/forum/1001974001/topic-1003372881.htm?sortType=1&pageI ...
- 中国大学MOOC课程信息之数据分析可视化二
版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/82318571 - 写在前面 本篇博客继续对中国大学MOOC ...
- 中国大学MOOC课程信息之数据分析可视化一
版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/82263391 9月2日更:中国大学MOOC课程信息之数据分 ...
- 中国大学MOOC 邮箱验证的问题
在使用 中国大学 MOOC 过程中,在PC端修改个人资料时,其中有项“常用邮箱”,于是写了QQ邮箱,结果发现一直无法验证,连邮件都无法收到. 经过多番尝试,重新使用邮箱注册的方式注册账号,然后注册成功 ...
- fabric.js 翻转,复制粘贴,隐藏, 删除,历史记录,撤销, 剪切, 图层,组合打散,锁定等功能
用vue写的 显示,隐藏 hide(){ this.canvas.getActiveObject().set('opacity', 0).setCoords(); this.canvas.reques ...
- js来监控复制粘贴
平时我们在复制网页上面代码到控制台调试时,有时会出现复制过来的代码后面加上了一下描述信息(作者.版权等信息),每次需要删除才能运行,所以今天看看怎么能保证我们粘贴的代码不携带这些信息呢? (funct ...
随机推荐
- 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
1 大人,时代变了! 赶快把自有业务的本地AI"模型"训练起来! 1.1 背景 目前AI已经大行其道,chatGPT.DeepSeek等如雨后春笋般涌现出来,笔者做为一个守旧派 ...
- 用python做时间序列预测五:时间序列缺失值处理
有的时候,一些时刻或连续时间段内的值无法采集到,或者本身就没有值,本文将介绍如何处理这种情况. 一般而言,有以下几种方法: 对所有的缺失值用零填充. 前向填充:比如用周一的值填充缺失的周二的值 后向填 ...
- [SDOI2008] Sandy的卡片 题解
讲一种自认为最暴力的方法. 首先肯定还是用差分的思想,对于每一张卡片进行重新标号,在卡片串与卡片串中插入特殊字符,然后找重复了 \(n\) 次的子串. 这里我们对于每一个子串开一个大小为 \(n\) ...
- 无线路由器dBi越大越好吗?
无线路由器dBi越大越好吗? 目前,常见的无线路由器,通过查看参数可知,大多为3dBi.5dBi或7dBi,对于用户来说,这个数值到底是越大越好,还是越小越好呢?对于这个问题,其实通过下面这张天线增益 ...
- Linux - centos6.6升级openssh9.7p1
一.注意事项 1.任何会被修改的配置文件都要提前备份 2.每一步操作都要记录 3.提前预演,知道可能遇到的问题,以及对应的解决方法,能够在生产环境上升级时,更快完成操作. 4.一开始用来操作的ssh会 ...
- python面向对象-我敢站在世界巅峰保证:这里可以找到几乎百分之九十python面向对象的内容(面向对象三大特性、成员、组合、特殊成员、反射、类的约束、自定义异常、多继承之C3算法)
概要: 面向对象 2 面向对象 Java语言:只支持面向对象方式 python语言: 面向过程[不推荐] 函数式[推荐] 面向对象[比较推荐]了解.能看懂.看源码 函数式编程:代码重用性.可读性较好 ...
- wxpython SetValue 获取列表数据获取不到
self.m_textCtrl4.SetValue(files) 同样的方法获取其他值就获取到了 ,后来想了想files是列表数据,于是将类型变为str型成功 self.m_textCtrl4.Set ...
- 【Bug记录】node-sass安装失败解决方案
node-sass 安装失败解决办法 前言 很多小伙伴在安装 node-sass 的时候都失败了,主要的原因是 node 版本和项目依赖的 node-sass 版本不匹配. 解决方案 解决方案:把项目 ...
- JMeter 获取 response body 的数据
JMeter 获取 response body 的数据 位置:右键(HTTP Request) - Add - Post Processors - BeanShell PostProcessor im ...
- mac根据路径找文件
在 finder 中 command + shift + G 跳出窗口中输入指定的路径,即可到达.