使用脚本向页面上添加新元素
使用脚本向前端页面插入元素,给 B 站添加一个真 · 一键三连的按钮
有兴趣也可以写二连,太耗硬币了 T_T
目前脚本已无法在 B 站上运行,
如果你有意愿更新本章可以联系指南维护人员进行协作更新。
插入新元素
脚本往页面增加新元素这种需求经常可见,例如百度云的脚本,就会往页面上添加一些解析链接之类的按钮,一些助手类型的会往页面上添加一些小窗口,显示脚本的运行状态等等。
如果要让脚本往页面上添加新元素,原理很简单。
-
首先使用
document.createElement
创建好你想插入的元素,例如按钮就document.createElement("button")
, -
然后找到你想插入的位置,使用
append/insertBefore
之类的方法插入你的element
。之后就可以在F12 开发者工具
中的element
中看到我们插入的内容了。
如果你有很多组件想放进去的话可以用 document.createElement("div")
,然后往 element
里的 innerHTML
直接写 html
代码。
例如:
let div = document.createElement("div");
div.innerHTML = "<span>span1</span><span>span2</span>";
// 插入到页面的body中
document.body.append(div);
当然上述是的原生的方法,例如有些网页自带 jQuery
,那么可以用 $("html代码")
之类的方式去创建元素,再用 jQuery
的 append
之类的方法插入到页面中去。
本系列内容还是使用原生的来进行讲解和使用。
新元素的事件监听
元素是添加进去了,但是只能看又不能用那有啥用,所以我们需要监听我们的元素事件。
最常用的就是 click
点击事件,点了我们的按钮,让我们的脚本做出一些反应。
单元素监听
如果是类似按钮的方式,我们可以这样写,直接的使用 onclick
的方法。
let btn = document.createElement("button");
btn.innerHTML =
"按钮文字,其实也可以写html,变成下面的样子(不过谁用按钮来包那么多html标签呢)";
//innerText也可以,区别是innerText不会解析html
btn.onclick = function () {
alert("点击了按钮");
};
document.body.append(btn);
执行上面的代码,一个新的按钮被插入到了 body 的最后面。
多元素监听
如果是写在一个 div
中的多个元素,可以使用下面的方式处理多个元素的点击事件。
let div = document.createElement("div");
div.innerHTML =
'<span id="span-1">span1</span><span class="sp">span class</span>';
div.onclick = function (event) {
if (event.target.id == "span-1") {
alert("span-1被点击了");
} else if (event.target.className == "sp") {
alert("sp这一类被点了");
}
};
document.body.append(div);
event 详细说明: Event
这两种监听方式的区别,简单来说就是前一种方法我们监听的只有一个元素,那我们就知道就点击事件只可能是对这一个元素的操作。
第二个例子中,因为其中包含了多个元素,我们就需要从 event
事件中找到实际被点击的元素(可以通过 id
或者 class
等去判断),来走我们的脚本执行流程。
监听器的绑定方式
另外再补充一下,上面的 onclick
可以改写成 addEventListener("click")
,类似下面这样。
div.addEventListener("click", function (ev) {
console.log(ev);
});
主要区别是 onclick
只能绑定一个 function
,addEventListener
可以绑定多个。
这又涉及了前端的内容,大家可以课后补习一下,可以看一下addEventListener 的说明。
当然,也还有其它的绑定事件的方法,这里就不一一列举了。
对于监听页面上已经有的按钮,推荐用 addEventListener
,以防 onclick
将原来的按钮事件覆盖掉(如果按钮也是用 onclick
的话),看情况而定。
在监听事件最后 return false;
可以使事件不再向上传递。
(有点扯远了,就随口提一句 😂,补充一些脚本的开发小技巧,就像是补充内力一样,以防踩坑,万一遇到了呢,不可能所有的东西都是完全按照教程来的 。有兴趣的可以课外去细究,也可以略过有个印象就好。)
新元素的 style
为了好看或者放在网页中不突兀,我们可以加上网页自带的 class 或者自己写一些样式,类似下面这样:
btn.className = "default-btn"; //添加class
btn.id = "submit-btn"; //添加id
btn.style.color = "#ff0000"; //给按钮写style样式,查看这个文档,看css与JavaScript的对应:https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Properties_Reference
div.innerHTML =
'<span id="span-1" class="span-class" style="font-size:12px">span1</span><span class="sp" style="color:red">span class</span>'; //在html里写style
在下面的例子中我使用了 "#"+Math.random().toString(16).slice(2,8)
生成随机颜色,每次点击按钮都会变成随机颜色。
function(){
document.querySelector(`#demo-2`).style.color =
"#"+Math.random().toString(16).slice(2,8);
}