如何在同一个元素上设置多个属性
How to set multiple attributes on the same element
我正在创建一个数独游戏板,我需要画一些线来划分 3x3 的方块。该板由按钮组成,所以我要做的是更改第 3 列和第 6 列按钮的边框颜色,以及行。
我面临的问题是我无法在按钮上添加 2 个边框:右侧和底部。 Js代码一次只添加一个属性,使用elem.setAttribute
。所以我尝试了一个据说可以让你添加超过 1 个属性的函数,但它似乎不起作用。
错误在哪里?
function createGameboard() {
var gameboard = document.getElementById("gameboard");
console.log("creating buttons");
for (var i = 1; i <= 9; i++) {
for (var j = 1; j <= 9; j++) {
var button = document.createElement("button");
button.id = i + "-" + j;
button.className = "buttons";
button.innerHTML = i + "-" + j;
if (i == 3 || i == 6) {
button.setAttribute("style", "border-bottom: 4px solid black");
}
if (j == 3 || j == 6) {
button.setAttribute("style", "border-right: 4px solid black");
}
if (
(i == 3 && j == 3) ||
(i == 6 && j == 6) ||
(i == 3 && j == 6) ||
(i == 6 && j == 3)
) {
setAttributes(button, {
"border-right": "4px solid black",
"border-bottom": "4px solid black",
});
}
gameboard.appendChild(button);
}
}
}
createGameboard();
function setAttributes(el, attrs) {
for (var key in attrs) {
el.setAttribute(key, attrs[key]);
}
}
body {
background-color: #0f4c5c;
}
h1,
h5 {
color: white;
}
.sudoku #gameboard {
width: 40vmin;
height: 40vmin;
display: grid;
grid-template-columns: repeat(9, 1fr);
gap: 0;
}
.sudoku button {
width: 10vmin;
height: 10vmin;
background: white;
border: 3px solid gray;
margin: 0;
}
<body>
<div class="container">
<div class="col">
<h1 class="row mx-auto my-3" id="title">
Sudoku
</h1>
<div class="row my-2 container sudoku">
<div class="gameboard" id="gameboard"></div>
</div>
</div>
</div>
</div>
</body>
如果您只使用 setAttribute
来设置样式,您可以这样修改它:
function setAttribute(element, key, value) {
element.style[key] = value
}
setAttribute(document.body, "backgroundColor", "red")
请注意,您需要使用 javascript 版本的样式(backgroundColor 而不是 background-color)。
这是因为你覆盖了属性。您必须连接属性。像那样:
const d = document.querySelector('button')
console.log('before',d)
d.setAttribute("style", "border-bottom: 4px solid green;")
_tmp = d.getAttribute("style")
d.setAttribute("style", _tmp + " border-right: 4px solid black")
console.log('after', d)
<button>1</button>
我不仅将函数用于样式,还用于 adding/removing class。
const setAttributes = (el, object) => {
for (let key in object) {
if (key === "addClass") {
el.classList.add(object[key]);
} else if (key === "removeClass") {
el.classList.remove(object[key]);
} else {
el.setAttribute(key, object[key]);
}
}
};
用法很简单:
setAttributes(cBtn, {
class: `${this.prefix}-clear hidden`,
type: "button",
"aria-label": this.clearBtnAriLabel,
});
我正在创建一个数独游戏板,我需要画一些线来划分 3x3 的方块。该板由按钮组成,所以我要做的是更改第 3 列和第 6 列按钮的边框颜色,以及行。
我面临的问题是我无法在按钮上添加 2 个边框:右侧和底部。 Js代码一次只添加一个属性,使用elem.setAttribute
。所以我尝试了一个据说可以让你添加超过 1 个属性的函数,但它似乎不起作用。
错误在哪里?
function createGameboard() {
var gameboard = document.getElementById("gameboard");
console.log("creating buttons");
for (var i = 1; i <= 9; i++) {
for (var j = 1; j <= 9; j++) {
var button = document.createElement("button");
button.id = i + "-" + j;
button.className = "buttons";
button.innerHTML = i + "-" + j;
if (i == 3 || i == 6) {
button.setAttribute("style", "border-bottom: 4px solid black");
}
if (j == 3 || j == 6) {
button.setAttribute("style", "border-right: 4px solid black");
}
if (
(i == 3 && j == 3) ||
(i == 6 && j == 6) ||
(i == 3 && j == 6) ||
(i == 6 && j == 3)
) {
setAttributes(button, {
"border-right": "4px solid black",
"border-bottom": "4px solid black",
});
}
gameboard.appendChild(button);
}
}
}
createGameboard();
function setAttributes(el, attrs) {
for (var key in attrs) {
el.setAttribute(key, attrs[key]);
}
}
body {
background-color: #0f4c5c;
}
h1,
h5 {
color: white;
}
.sudoku #gameboard {
width: 40vmin;
height: 40vmin;
display: grid;
grid-template-columns: repeat(9, 1fr);
gap: 0;
}
.sudoku button {
width: 10vmin;
height: 10vmin;
background: white;
border: 3px solid gray;
margin: 0;
}
<body>
<div class="container">
<div class="col">
<h1 class="row mx-auto my-3" id="title">
Sudoku
</h1>
<div class="row my-2 container sudoku">
<div class="gameboard" id="gameboard"></div>
</div>
</div>
</div>
</div>
</body>
如果您只使用 setAttribute
来设置样式,您可以这样修改它:
function setAttribute(element, key, value) {
element.style[key] = value
}
setAttribute(document.body, "backgroundColor", "red")
请注意,您需要使用 javascript 版本的样式(backgroundColor 而不是 background-color)。
这是因为你覆盖了属性。您必须连接属性。像那样:
const d = document.querySelector('button')
console.log('before',d)
d.setAttribute("style", "border-bottom: 4px solid green;")
_tmp = d.getAttribute("style")
d.setAttribute("style", _tmp + " border-right: 4px solid black")
console.log('after', d)
<button>1</button>
我不仅将函数用于样式,还用于 adding/removing class。
const setAttributes = (el, object) => {
for (let key in object) {
if (key === "addClass") {
el.classList.add(object[key]);
} else if (key === "removeClass") {
el.classList.remove(object[key]);
} else {
el.setAttribute(key, object[key]);
}
}
};
用法很简单:
setAttributes(cBtn, {
class: `${this.prefix}-clear hidden`,
type: "button",
"aria-label": this.clearBtnAriLabel,
});