我希望当我创建一个新按钮时,它的类型默认设置为“按钮”。这是我尝试过的:
var createE = document.createElement;
document.createElement = (str) => {
let elem = createE(str);
if (str.toLowerCase() == "button") {
elem.type = "button";
}
}
我在
let elem = createE(str);
(Chrome 中) 遇到“非法调用”异常
除了在我本来要使用 createElement("Button") 的每个地方使用函数之外,还有其他方法可以覆盖原型或以其他方式实现此目的吗?
您可以使用代理重写该方法,如下所示:
const createElementOriginal = document.createElement;
const createElement = createElementOriginal.bind(document);
document.createElement = new Proxy(document.createElement, {
apply(_target, _thisArg, [tagName, options]) {
const element = createElement(tagName, options);
if (tagName.toLowerCase() === "button") {
element.setAttribute("type", "button");
}
return element;
},
});
const btn = document.createElement("button");
console.log(btn.type, btn.outerHTML); // "button" "<button type="button"></button>"