Chessboard in pure js
I began js 3 days ago at school, I had some C basics before so the main problem here would be the syntax (I think).
The goal is to produce a chessboard, 8x8 black and white square, but I can't get the code to show anything. What am I missing ?
(the html just have the script src="./x.js" part and the "body" part)
document.body.onload = addElement.innerHTML;
function addElement() {
var newTable = document.createElement("table");
for (var i = 1; i < 9; i++) {
var newTr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var newTd = document.createElement('td');
if (i % 2 == j % 2) {
newTd.className = "white";
} else {
newTd.className = "black";
}
newTr.appendChild(newTd);
}
newTable.appendChild(newTr);
}
document.body.appendChild(newTable);
document.getElementByClass("black").style.backgroundColor = "black";
document.getElementByClass("white").style.backgroundColor = "white";
document.getElementByTag("newTd").style.width = "25px";
document.getElementByTag("newTd").style.height = "25px";
}
javascript
add a comment |
I began js 3 days ago at school, I had some C basics before so the main problem here would be the syntax (I think).
The goal is to produce a chessboard, 8x8 black and white square, but I can't get the code to show anything. What am I missing ?
(the html just have the script src="./x.js" part and the "body" part)
document.body.onload = addElement.innerHTML;
function addElement() {
var newTable = document.createElement("table");
for (var i = 1; i < 9; i++) {
var newTr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var newTd = document.createElement('td');
if (i % 2 == j % 2) {
newTd.className = "white";
} else {
newTd.className = "black";
}
newTr.appendChild(newTd);
}
newTable.appendChild(newTr);
}
document.body.appendChild(newTable);
document.getElementByClass("black").style.backgroundColor = "black";
document.getElementByClass("white").style.backgroundColor = "white";
document.getElementByTag("newTd").style.width = "25px";
document.getElementByTag("newTd").style.height = "25px";
}
javascript
13
Quick tip - press F12 and you'll be able to see any errors in your console.
– markmoxx
Dec 12 '18 at 10:56
add a comment |
I began js 3 days ago at school, I had some C basics before so the main problem here would be the syntax (I think).
The goal is to produce a chessboard, 8x8 black and white square, but I can't get the code to show anything. What am I missing ?
(the html just have the script src="./x.js" part and the "body" part)
document.body.onload = addElement.innerHTML;
function addElement() {
var newTable = document.createElement("table");
for (var i = 1; i < 9; i++) {
var newTr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var newTd = document.createElement('td');
if (i % 2 == j % 2) {
newTd.className = "white";
} else {
newTd.className = "black";
}
newTr.appendChild(newTd);
}
newTable.appendChild(newTr);
}
document.body.appendChild(newTable);
document.getElementByClass("black").style.backgroundColor = "black";
document.getElementByClass("white").style.backgroundColor = "white";
document.getElementByTag("newTd").style.width = "25px";
document.getElementByTag("newTd").style.height = "25px";
}
javascript
I began js 3 days ago at school, I had some C basics before so the main problem here would be the syntax (I think).
The goal is to produce a chessboard, 8x8 black and white square, but I can't get the code to show anything. What am I missing ?
(the html just have the script src="./x.js" part and the "body" part)
document.body.onload = addElement.innerHTML;
function addElement() {
var newTable = document.createElement("table");
for (var i = 1; i < 9; i++) {
var newTr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var newTd = document.createElement('td');
if (i % 2 == j % 2) {
newTd.className = "white";
} else {
newTd.className = "black";
}
newTr.appendChild(newTd);
}
newTable.appendChild(newTr);
}
document.body.appendChild(newTable);
document.getElementByClass("black").style.backgroundColor = "black";
document.getElementByClass("white").style.backgroundColor = "white";
document.getElementByTag("newTd").style.width = "25px";
document.getElementByTag("newTd").style.height = "25px";
}
javascript
javascript
edited Dec 12 '18 at 11:13
markmoxx
1,147617
1,147617
asked Dec 12 '18 at 10:45
JauneJaune
907
907
13
Quick tip - press F12 and you'll be able to see any errors in your console.
– markmoxx
Dec 12 '18 at 10:56
add a comment |
13
Quick tip - press F12 and you'll be able to see any errors in your console.
– markmoxx
Dec 12 '18 at 10:56
13
13
Quick tip - press F12 and you'll be able to see any errors in your console.
– markmoxx
Dec 12 '18 at 10:56
Quick tip - press F12 and you'll be able to see any errors in your console.
– markmoxx
Dec 12 '18 at 10:56
add a comment |
5 Answers
5
active
oldest
votes
There are few mistakes in your code use getElementsByClassName
instead of getElementByClass
and use getElementsByTagName
instead of getElementByTag
.
Also you need to loop over each selected elements.
Use window.onload = addElement;
or you can simply call addElement();
after function declaration completes.
window.onload = addElement;
function addElement() {
var newTable = document.createElement("table");
for (var i = 1; i < 9; i++) {
var newTr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var newTd = document.createElement('td');
if (i % 2 == j % 2) {
newTd.className = "white";
} else {
newTd.className = "black";
}
newTr.appendChild(newTd);
}
newTable.appendChild(newTr);
}
document.body.appendChild(newTable);
var i = 0;
for (i = 0; i < document.getElementsByClassName("black").length; i++) {
document.getElementsByClassName("black")[i].style.backgroundColor = "black";
}
for (i = 0; i < document.getElementsByClassName("white").length; i++) {
document.getElementsByClassName("white")[i].style.backgroundColor = "white";
}
for (i = 0; i < document.getElementsByTagName("td").length; i++) {
document.getElementsByTagName("td")[i].style.width = "25px";
document.getElementsByTagName("td")[i].style.height = "25px";
}
}
add a comment |
A simpler approach would be to add the attributes when you create each element and not after. Like this:
if (i % 2 == j % 2) newTd.style.backgroundColor = "white";
else newTd.style.backgroundColor = "black";
newTd.style.width = "25px";
newTd.style.height = "25px";
See this fiddle: http://jsfiddle.net/vdquLn65/2/
About your current code you could use getElementsByClassName and getElementsByTagName and iterate over the elements they return to do what you want.
Yeah I thought about that too while making the tests, but I opted in the current organisation so the css is all in the same spot, after the main js part. It could have made it easier to solve my problem tho, or even solve it. Thanks for the advice
– Jaune
Dec 12 '18 at 11:16
add a comment |
As you currently have it, addElement.innerHTML
is a reference to the innerHTML property of the addElement
variable. addElement
is a reference to a function definition, and does not have an innerHTML
property.
Try changing your first line to this:
window.onload = addElement;
See: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload
Edit: I was a bit too quick to post this, and didn't spot the other errors in the code as mentioned in Karan's answer.
1
There is no explanation what so ever, he is curious about knowing what he did wrong, the solution might be useful, but seems less of a priority / necessity
– Icepickle
Dec 12 '18 at 10:51
Oops, thanks @RolandStarke
– markmoxx
Dec 12 '18 at 10:52
Well indeed it doesn't solve my problem, but I'm learning so I'm still happy to understand something better so thank anyway
– Jaune
Dec 12 '18 at 10:56
add a comment |
Hello Jaune and welcome to Stack Overflow. I have added an answer that will create the data first and then map that that data to elements using functions. If you have any questions please let me know.
const field = ([x, y, color]) => {
const td = document.createElement('td');
td.setAttribute('data-x', x);
td.setAttribute('data-y', y);
td.className = color;
td.innerHtml = `${x}-${y}`;
return td;
};
const row = (row) => {
const tr = document.createElement('tr');
row.forEach((fieldItem) =>
tr.appendChild(field(fieldItem)),
);
return tr;
};
const table = (tableData) => {
const table = document.createElement('table');
tableData.forEach((rowData) =>
table.appendChild(row(rowData)),
);
return table;
};
const tableData = Array.from(Array(8).keys()).map((x) =>
Array.from(Array(8).keys()).map((y) => [
x,
y,
(x + y) % 2 ? 'black' : 'white',
]),
);
document.body.appendChild(table(tableData));
.black {
width:10px;
height:10px;
background-color: black;
}
.white {
width:10px;
height:10px;
background-color: white;
}
table {
border: 1px solid black;
}
Hello HMR, and thanks for the warm welcome. I'd gladly take your proposal for help, but I'm still a little too fresh with the syntax to have interesting question about your code at the moment. Thanks again tho
– Jaune
Dec 12 '18 at 11:28
1
@Jaune The following book can help you out with syntax and here are some handy array functions.
– HMR
Dec 12 '18 at 11:53
1
Great docs, thanks a lot !
– Jaune
Dec 12 '18 at 12:47
While this is certainly the preferable way to do it, I'd like to point out that the question was to produce a chessboard using Javascript alone.
– Abion47
Dec 12 '18 at 19:06
add a comment |
As an alternative approach, consider coloring the table itself black and only coloring the corresponding tiles white:
window.onload = addElement;
function addElement() {
var tbl = document.createElement('table');
tbl.style.backgroundColor = 'black';
for (var i = 1; i < 9; i++) {
var tr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var td = document.createElement('td');
td.style.width = '25px';
td.style.height = '25px';
if (i % 2 == j % 2) {
td.style.backgroundColor = 'white';
}
tr.appendChild(td);
}
tbl.appendChild(tr);
}
document.body.appendChild(tbl);
}
And also, as Alex G said, it's much simpler to do the styling at the time the element is created instead of trying to iterate over them later. I understand the mindset of separating the logic and style portions of the code, but in this case it isn't really worth the added effort and complexity, and there are better ways to do it anyway.
And besides, if you wanted to separate the style from the logic, that's what CSS files are for. :P
I know I know, but the exercise being JS only, I didn't even had a .css or a <style> soooo it kinda messed my head up tbh :p Another student indeed went with the white td on black table thanks to your advice and it went well !
– Jaune
Dec 13 '18 at 12:57
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53741270%2fchessboard-in-pure-js%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
There are few mistakes in your code use getElementsByClassName
instead of getElementByClass
and use getElementsByTagName
instead of getElementByTag
.
Also you need to loop over each selected elements.
Use window.onload = addElement;
or you can simply call addElement();
after function declaration completes.
window.onload = addElement;
function addElement() {
var newTable = document.createElement("table");
for (var i = 1; i < 9; i++) {
var newTr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var newTd = document.createElement('td');
if (i % 2 == j % 2) {
newTd.className = "white";
} else {
newTd.className = "black";
}
newTr.appendChild(newTd);
}
newTable.appendChild(newTr);
}
document.body.appendChild(newTable);
var i = 0;
for (i = 0; i < document.getElementsByClassName("black").length; i++) {
document.getElementsByClassName("black")[i].style.backgroundColor = "black";
}
for (i = 0; i < document.getElementsByClassName("white").length; i++) {
document.getElementsByClassName("white")[i].style.backgroundColor = "white";
}
for (i = 0; i < document.getElementsByTagName("td").length; i++) {
document.getElementsByTagName("td")[i].style.width = "25px";
document.getElementsByTagName("td")[i].style.height = "25px";
}
}
add a comment |
There are few mistakes in your code use getElementsByClassName
instead of getElementByClass
and use getElementsByTagName
instead of getElementByTag
.
Also you need to loop over each selected elements.
Use window.onload = addElement;
or you can simply call addElement();
after function declaration completes.
window.onload = addElement;
function addElement() {
var newTable = document.createElement("table");
for (var i = 1; i < 9; i++) {
var newTr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var newTd = document.createElement('td');
if (i % 2 == j % 2) {
newTd.className = "white";
} else {
newTd.className = "black";
}
newTr.appendChild(newTd);
}
newTable.appendChild(newTr);
}
document.body.appendChild(newTable);
var i = 0;
for (i = 0; i < document.getElementsByClassName("black").length; i++) {
document.getElementsByClassName("black")[i].style.backgroundColor = "black";
}
for (i = 0; i < document.getElementsByClassName("white").length; i++) {
document.getElementsByClassName("white")[i].style.backgroundColor = "white";
}
for (i = 0; i < document.getElementsByTagName("td").length; i++) {
document.getElementsByTagName("td")[i].style.width = "25px";
document.getElementsByTagName("td")[i].style.height = "25px";
}
}
add a comment |
There are few mistakes in your code use getElementsByClassName
instead of getElementByClass
and use getElementsByTagName
instead of getElementByTag
.
Also you need to loop over each selected elements.
Use window.onload = addElement;
or you can simply call addElement();
after function declaration completes.
window.onload = addElement;
function addElement() {
var newTable = document.createElement("table");
for (var i = 1; i < 9; i++) {
var newTr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var newTd = document.createElement('td');
if (i % 2 == j % 2) {
newTd.className = "white";
} else {
newTd.className = "black";
}
newTr.appendChild(newTd);
}
newTable.appendChild(newTr);
}
document.body.appendChild(newTable);
var i = 0;
for (i = 0; i < document.getElementsByClassName("black").length; i++) {
document.getElementsByClassName("black")[i].style.backgroundColor = "black";
}
for (i = 0; i < document.getElementsByClassName("white").length; i++) {
document.getElementsByClassName("white")[i].style.backgroundColor = "white";
}
for (i = 0; i < document.getElementsByTagName("td").length; i++) {
document.getElementsByTagName("td")[i].style.width = "25px";
document.getElementsByTagName("td")[i].style.height = "25px";
}
}
There are few mistakes in your code use getElementsByClassName
instead of getElementByClass
and use getElementsByTagName
instead of getElementByTag
.
Also you need to loop over each selected elements.
Use window.onload = addElement;
or you can simply call addElement();
after function declaration completes.
window.onload = addElement;
function addElement() {
var newTable = document.createElement("table");
for (var i = 1; i < 9; i++) {
var newTr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var newTd = document.createElement('td');
if (i % 2 == j % 2) {
newTd.className = "white";
} else {
newTd.className = "black";
}
newTr.appendChild(newTd);
}
newTable.appendChild(newTr);
}
document.body.appendChild(newTable);
var i = 0;
for (i = 0; i < document.getElementsByClassName("black").length; i++) {
document.getElementsByClassName("black")[i].style.backgroundColor = "black";
}
for (i = 0; i < document.getElementsByClassName("white").length; i++) {
document.getElementsByClassName("white")[i].style.backgroundColor = "white";
}
for (i = 0; i < document.getElementsByTagName("td").length; i++) {
document.getElementsByTagName("td")[i].style.width = "25px";
document.getElementsByTagName("td")[i].style.height = "25px";
}
}
window.onload = addElement;
function addElement() {
var newTable = document.createElement("table");
for (var i = 1; i < 9; i++) {
var newTr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var newTd = document.createElement('td');
if (i % 2 == j % 2) {
newTd.className = "white";
} else {
newTd.className = "black";
}
newTr.appendChild(newTd);
}
newTable.appendChild(newTr);
}
document.body.appendChild(newTable);
var i = 0;
for (i = 0; i < document.getElementsByClassName("black").length; i++) {
document.getElementsByClassName("black")[i].style.backgroundColor = "black";
}
for (i = 0; i < document.getElementsByClassName("white").length; i++) {
document.getElementsByClassName("white")[i].style.backgroundColor = "white";
}
for (i = 0; i < document.getElementsByTagName("td").length; i++) {
document.getElementsByTagName("td")[i].style.width = "25px";
document.getElementsByTagName("td")[i].style.height = "25px";
}
}
window.onload = addElement;
function addElement() {
var newTable = document.createElement("table");
for (var i = 1; i < 9; i++) {
var newTr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var newTd = document.createElement('td');
if (i % 2 == j % 2) {
newTd.className = "white";
} else {
newTd.className = "black";
}
newTr.appendChild(newTd);
}
newTable.appendChild(newTr);
}
document.body.appendChild(newTable);
var i = 0;
for (i = 0; i < document.getElementsByClassName("black").length; i++) {
document.getElementsByClassName("black")[i].style.backgroundColor = "black";
}
for (i = 0; i < document.getElementsByClassName("white").length; i++) {
document.getElementsByClassName("white")[i].style.backgroundColor = "white";
}
for (i = 0; i < document.getElementsByTagName("td").length; i++) {
document.getElementsByTagName("td")[i].style.width = "25px";
document.getElementsByTagName("td")[i].style.height = "25px";
}
}
answered Dec 12 '18 at 10:54
KaranKaran
3,3762424
3,3762424
add a comment |
add a comment |
A simpler approach would be to add the attributes when you create each element and not after. Like this:
if (i % 2 == j % 2) newTd.style.backgroundColor = "white";
else newTd.style.backgroundColor = "black";
newTd.style.width = "25px";
newTd.style.height = "25px";
See this fiddle: http://jsfiddle.net/vdquLn65/2/
About your current code you could use getElementsByClassName and getElementsByTagName and iterate over the elements they return to do what you want.
Yeah I thought about that too while making the tests, but I opted in the current organisation so the css is all in the same spot, after the main js part. It could have made it easier to solve my problem tho, or even solve it. Thanks for the advice
– Jaune
Dec 12 '18 at 11:16
add a comment |
A simpler approach would be to add the attributes when you create each element and not after. Like this:
if (i % 2 == j % 2) newTd.style.backgroundColor = "white";
else newTd.style.backgroundColor = "black";
newTd.style.width = "25px";
newTd.style.height = "25px";
See this fiddle: http://jsfiddle.net/vdquLn65/2/
About your current code you could use getElementsByClassName and getElementsByTagName and iterate over the elements they return to do what you want.
Yeah I thought about that too while making the tests, but I opted in the current organisation so the css is all in the same spot, after the main js part. It could have made it easier to solve my problem tho, or even solve it. Thanks for the advice
– Jaune
Dec 12 '18 at 11:16
add a comment |
A simpler approach would be to add the attributes when you create each element and not after. Like this:
if (i % 2 == j % 2) newTd.style.backgroundColor = "white";
else newTd.style.backgroundColor = "black";
newTd.style.width = "25px";
newTd.style.height = "25px";
See this fiddle: http://jsfiddle.net/vdquLn65/2/
About your current code you could use getElementsByClassName and getElementsByTagName and iterate over the elements they return to do what you want.
A simpler approach would be to add the attributes when you create each element and not after. Like this:
if (i % 2 == j % 2) newTd.style.backgroundColor = "white";
else newTd.style.backgroundColor = "black";
newTd.style.width = "25px";
newTd.style.height = "25px";
See this fiddle: http://jsfiddle.net/vdquLn65/2/
About your current code you could use getElementsByClassName and getElementsByTagName and iterate over the elements they return to do what you want.
answered Dec 12 '18 at 11:04
Alex GAlex G
1,289139
1,289139
Yeah I thought about that too while making the tests, but I opted in the current organisation so the css is all in the same spot, after the main js part. It could have made it easier to solve my problem tho, or even solve it. Thanks for the advice
– Jaune
Dec 12 '18 at 11:16
add a comment |
Yeah I thought about that too while making the tests, but I opted in the current organisation so the css is all in the same spot, after the main js part. It could have made it easier to solve my problem tho, or even solve it. Thanks for the advice
– Jaune
Dec 12 '18 at 11:16
Yeah I thought about that too while making the tests, but I opted in the current organisation so the css is all in the same spot, after the main js part. It could have made it easier to solve my problem tho, or even solve it. Thanks for the advice
– Jaune
Dec 12 '18 at 11:16
Yeah I thought about that too while making the tests, but I opted in the current organisation so the css is all in the same spot, after the main js part. It could have made it easier to solve my problem tho, or even solve it. Thanks for the advice
– Jaune
Dec 12 '18 at 11:16
add a comment |
As you currently have it, addElement.innerHTML
is a reference to the innerHTML property of the addElement
variable. addElement
is a reference to a function definition, and does not have an innerHTML
property.
Try changing your first line to this:
window.onload = addElement;
See: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload
Edit: I was a bit too quick to post this, and didn't spot the other errors in the code as mentioned in Karan's answer.
1
There is no explanation what so ever, he is curious about knowing what he did wrong, the solution might be useful, but seems less of a priority / necessity
– Icepickle
Dec 12 '18 at 10:51
Oops, thanks @RolandStarke
– markmoxx
Dec 12 '18 at 10:52
Well indeed it doesn't solve my problem, but I'm learning so I'm still happy to understand something better so thank anyway
– Jaune
Dec 12 '18 at 10:56
add a comment |
As you currently have it, addElement.innerHTML
is a reference to the innerHTML property of the addElement
variable. addElement
is a reference to a function definition, and does not have an innerHTML
property.
Try changing your first line to this:
window.onload = addElement;
See: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload
Edit: I was a bit too quick to post this, and didn't spot the other errors in the code as mentioned in Karan's answer.
1
There is no explanation what so ever, he is curious about knowing what he did wrong, the solution might be useful, but seems less of a priority / necessity
– Icepickle
Dec 12 '18 at 10:51
Oops, thanks @RolandStarke
– markmoxx
Dec 12 '18 at 10:52
Well indeed it doesn't solve my problem, but I'm learning so I'm still happy to understand something better so thank anyway
– Jaune
Dec 12 '18 at 10:56
add a comment |
As you currently have it, addElement.innerHTML
is a reference to the innerHTML property of the addElement
variable. addElement
is a reference to a function definition, and does not have an innerHTML
property.
Try changing your first line to this:
window.onload = addElement;
See: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload
Edit: I was a bit too quick to post this, and didn't spot the other errors in the code as mentioned in Karan's answer.
As you currently have it, addElement.innerHTML
is a reference to the innerHTML property of the addElement
variable. addElement
is a reference to a function definition, and does not have an innerHTML
property.
Try changing your first line to this:
window.onload = addElement;
See: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload
Edit: I was a bit too quick to post this, and didn't spot the other errors in the code as mentioned in Karan's answer.
edited Dec 12 '18 at 10:58
answered Dec 12 '18 at 10:49
markmoxxmarkmoxx
1,147617
1,147617
1
There is no explanation what so ever, he is curious about knowing what he did wrong, the solution might be useful, but seems less of a priority / necessity
– Icepickle
Dec 12 '18 at 10:51
Oops, thanks @RolandStarke
– markmoxx
Dec 12 '18 at 10:52
Well indeed it doesn't solve my problem, but I'm learning so I'm still happy to understand something better so thank anyway
– Jaune
Dec 12 '18 at 10:56
add a comment |
1
There is no explanation what so ever, he is curious about knowing what he did wrong, the solution might be useful, but seems less of a priority / necessity
– Icepickle
Dec 12 '18 at 10:51
Oops, thanks @RolandStarke
– markmoxx
Dec 12 '18 at 10:52
Well indeed it doesn't solve my problem, but I'm learning so I'm still happy to understand something better so thank anyway
– Jaune
Dec 12 '18 at 10:56
1
1
There is no explanation what so ever, he is curious about knowing what he did wrong, the solution might be useful, but seems less of a priority / necessity
– Icepickle
Dec 12 '18 at 10:51
There is no explanation what so ever, he is curious about knowing what he did wrong, the solution might be useful, but seems less of a priority / necessity
– Icepickle
Dec 12 '18 at 10:51
Oops, thanks @RolandStarke
– markmoxx
Dec 12 '18 at 10:52
Oops, thanks @RolandStarke
– markmoxx
Dec 12 '18 at 10:52
Well indeed it doesn't solve my problem, but I'm learning so I'm still happy to understand something better so thank anyway
– Jaune
Dec 12 '18 at 10:56
Well indeed it doesn't solve my problem, but I'm learning so I'm still happy to understand something better so thank anyway
– Jaune
Dec 12 '18 at 10:56
add a comment |
Hello Jaune and welcome to Stack Overflow. I have added an answer that will create the data first and then map that that data to elements using functions. If you have any questions please let me know.
const field = ([x, y, color]) => {
const td = document.createElement('td');
td.setAttribute('data-x', x);
td.setAttribute('data-y', y);
td.className = color;
td.innerHtml = `${x}-${y}`;
return td;
};
const row = (row) => {
const tr = document.createElement('tr');
row.forEach((fieldItem) =>
tr.appendChild(field(fieldItem)),
);
return tr;
};
const table = (tableData) => {
const table = document.createElement('table');
tableData.forEach((rowData) =>
table.appendChild(row(rowData)),
);
return table;
};
const tableData = Array.from(Array(8).keys()).map((x) =>
Array.from(Array(8).keys()).map((y) => [
x,
y,
(x + y) % 2 ? 'black' : 'white',
]),
);
document.body.appendChild(table(tableData));
.black {
width:10px;
height:10px;
background-color: black;
}
.white {
width:10px;
height:10px;
background-color: white;
}
table {
border: 1px solid black;
}
Hello HMR, and thanks for the warm welcome. I'd gladly take your proposal for help, but I'm still a little too fresh with the syntax to have interesting question about your code at the moment. Thanks again tho
– Jaune
Dec 12 '18 at 11:28
1
@Jaune The following book can help you out with syntax and here are some handy array functions.
– HMR
Dec 12 '18 at 11:53
1
Great docs, thanks a lot !
– Jaune
Dec 12 '18 at 12:47
While this is certainly the preferable way to do it, I'd like to point out that the question was to produce a chessboard using Javascript alone.
– Abion47
Dec 12 '18 at 19:06
add a comment |
Hello Jaune and welcome to Stack Overflow. I have added an answer that will create the data first and then map that that data to elements using functions. If you have any questions please let me know.
const field = ([x, y, color]) => {
const td = document.createElement('td');
td.setAttribute('data-x', x);
td.setAttribute('data-y', y);
td.className = color;
td.innerHtml = `${x}-${y}`;
return td;
};
const row = (row) => {
const tr = document.createElement('tr');
row.forEach((fieldItem) =>
tr.appendChild(field(fieldItem)),
);
return tr;
};
const table = (tableData) => {
const table = document.createElement('table');
tableData.forEach((rowData) =>
table.appendChild(row(rowData)),
);
return table;
};
const tableData = Array.from(Array(8).keys()).map((x) =>
Array.from(Array(8).keys()).map((y) => [
x,
y,
(x + y) % 2 ? 'black' : 'white',
]),
);
document.body.appendChild(table(tableData));
.black {
width:10px;
height:10px;
background-color: black;
}
.white {
width:10px;
height:10px;
background-color: white;
}
table {
border: 1px solid black;
}
Hello HMR, and thanks for the warm welcome. I'd gladly take your proposal for help, but I'm still a little too fresh with the syntax to have interesting question about your code at the moment. Thanks again tho
– Jaune
Dec 12 '18 at 11:28
1
@Jaune The following book can help you out with syntax and here are some handy array functions.
– HMR
Dec 12 '18 at 11:53
1
Great docs, thanks a lot !
– Jaune
Dec 12 '18 at 12:47
While this is certainly the preferable way to do it, I'd like to point out that the question was to produce a chessboard using Javascript alone.
– Abion47
Dec 12 '18 at 19:06
add a comment |
Hello Jaune and welcome to Stack Overflow. I have added an answer that will create the data first and then map that that data to elements using functions. If you have any questions please let me know.
const field = ([x, y, color]) => {
const td = document.createElement('td');
td.setAttribute('data-x', x);
td.setAttribute('data-y', y);
td.className = color;
td.innerHtml = `${x}-${y}`;
return td;
};
const row = (row) => {
const tr = document.createElement('tr');
row.forEach((fieldItem) =>
tr.appendChild(field(fieldItem)),
);
return tr;
};
const table = (tableData) => {
const table = document.createElement('table');
tableData.forEach((rowData) =>
table.appendChild(row(rowData)),
);
return table;
};
const tableData = Array.from(Array(8).keys()).map((x) =>
Array.from(Array(8).keys()).map((y) => [
x,
y,
(x + y) % 2 ? 'black' : 'white',
]),
);
document.body.appendChild(table(tableData));
.black {
width:10px;
height:10px;
background-color: black;
}
.white {
width:10px;
height:10px;
background-color: white;
}
table {
border: 1px solid black;
}
Hello Jaune and welcome to Stack Overflow. I have added an answer that will create the data first and then map that that data to elements using functions. If you have any questions please let me know.
const field = ([x, y, color]) => {
const td = document.createElement('td');
td.setAttribute('data-x', x);
td.setAttribute('data-y', y);
td.className = color;
td.innerHtml = `${x}-${y}`;
return td;
};
const row = (row) => {
const tr = document.createElement('tr');
row.forEach((fieldItem) =>
tr.appendChild(field(fieldItem)),
);
return tr;
};
const table = (tableData) => {
const table = document.createElement('table');
tableData.forEach((rowData) =>
table.appendChild(row(rowData)),
);
return table;
};
const tableData = Array.from(Array(8).keys()).map((x) =>
Array.from(Array(8).keys()).map((y) => [
x,
y,
(x + y) % 2 ? 'black' : 'white',
]),
);
document.body.appendChild(table(tableData));
.black {
width:10px;
height:10px;
background-color: black;
}
.white {
width:10px;
height:10px;
background-color: white;
}
table {
border: 1px solid black;
}
const field = ([x, y, color]) => {
const td = document.createElement('td');
td.setAttribute('data-x', x);
td.setAttribute('data-y', y);
td.className = color;
td.innerHtml = `${x}-${y}`;
return td;
};
const row = (row) => {
const tr = document.createElement('tr');
row.forEach((fieldItem) =>
tr.appendChild(field(fieldItem)),
);
return tr;
};
const table = (tableData) => {
const table = document.createElement('table');
tableData.forEach((rowData) =>
table.appendChild(row(rowData)),
);
return table;
};
const tableData = Array.from(Array(8).keys()).map((x) =>
Array.from(Array(8).keys()).map((y) => [
x,
y,
(x + y) % 2 ? 'black' : 'white',
]),
);
document.body.appendChild(table(tableData));
.black {
width:10px;
height:10px;
background-color: black;
}
.white {
width:10px;
height:10px;
background-color: white;
}
table {
border: 1px solid black;
}
const field = ([x, y, color]) => {
const td = document.createElement('td');
td.setAttribute('data-x', x);
td.setAttribute('data-y', y);
td.className = color;
td.innerHtml = `${x}-${y}`;
return td;
};
const row = (row) => {
const tr = document.createElement('tr');
row.forEach((fieldItem) =>
tr.appendChild(field(fieldItem)),
);
return tr;
};
const table = (tableData) => {
const table = document.createElement('table');
tableData.forEach((rowData) =>
table.appendChild(row(rowData)),
);
return table;
};
const tableData = Array.from(Array(8).keys()).map((x) =>
Array.from(Array(8).keys()).map((y) => [
x,
y,
(x + y) % 2 ? 'black' : 'white',
]),
);
document.body.appendChild(table(tableData));
.black {
width:10px;
height:10px;
background-color: black;
}
.white {
width:10px;
height:10px;
background-color: white;
}
table {
border: 1px solid black;
}
answered Dec 12 '18 at 11:15
HMRHMR
13.9k113899
13.9k113899
Hello HMR, and thanks for the warm welcome. I'd gladly take your proposal for help, but I'm still a little too fresh with the syntax to have interesting question about your code at the moment. Thanks again tho
– Jaune
Dec 12 '18 at 11:28
1
@Jaune The following book can help you out with syntax and here are some handy array functions.
– HMR
Dec 12 '18 at 11:53
1
Great docs, thanks a lot !
– Jaune
Dec 12 '18 at 12:47
While this is certainly the preferable way to do it, I'd like to point out that the question was to produce a chessboard using Javascript alone.
– Abion47
Dec 12 '18 at 19:06
add a comment |
Hello HMR, and thanks for the warm welcome. I'd gladly take your proposal for help, but I'm still a little too fresh with the syntax to have interesting question about your code at the moment. Thanks again tho
– Jaune
Dec 12 '18 at 11:28
1
@Jaune The following book can help you out with syntax and here are some handy array functions.
– HMR
Dec 12 '18 at 11:53
1
Great docs, thanks a lot !
– Jaune
Dec 12 '18 at 12:47
While this is certainly the preferable way to do it, I'd like to point out that the question was to produce a chessboard using Javascript alone.
– Abion47
Dec 12 '18 at 19:06
Hello HMR, and thanks for the warm welcome. I'd gladly take your proposal for help, but I'm still a little too fresh with the syntax to have interesting question about your code at the moment. Thanks again tho
– Jaune
Dec 12 '18 at 11:28
Hello HMR, and thanks for the warm welcome. I'd gladly take your proposal for help, but I'm still a little too fresh with the syntax to have interesting question about your code at the moment. Thanks again tho
– Jaune
Dec 12 '18 at 11:28
1
1
@Jaune The following book can help you out with syntax and here are some handy array functions.
– HMR
Dec 12 '18 at 11:53
@Jaune The following book can help you out with syntax and here are some handy array functions.
– HMR
Dec 12 '18 at 11:53
1
1
Great docs, thanks a lot !
– Jaune
Dec 12 '18 at 12:47
Great docs, thanks a lot !
– Jaune
Dec 12 '18 at 12:47
While this is certainly the preferable way to do it, I'd like to point out that the question was to produce a chessboard using Javascript alone.
– Abion47
Dec 12 '18 at 19:06
While this is certainly the preferable way to do it, I'd like to point out that the question was to produce a chessboard using Javascript alone.
– Abion47
Dec 12 '18 at 19:06
add a comment |
As an alternative approach, consider coloring the table itself black and only coloring the corresponding tiles white:
window.onload = addElement;
function addElement() {
var tbl = document.createElement('table');
tbl.style.backgroundColor = 'black';
for (var i = 1; i < 9; i++) {
var tr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var td = document.createElement('td');
td.style.width = '25px';
td.style.height = '25px';
if (i % 2 == j % 2) {
td.style.backgroundColor = 'white';
}
tr.appendChild(td);
}
tbl.appendChild(tr);
}
document.body.appendChild(tbl);
}
And also, as Alex G said, it's much simpler to do the styling at the time the element is created instead of trying to iterate over them later. I understand the mindset of separating the logic and style portions of the code, but in this case it isn't really worth the added effort and complexity, and there are better ways to do it anyway.
And besides, if you wanted to separate the style from the logic, that's what CSS files are for. :P
I know I know, but the exercise being JS only, I didn't even had a .css or a <style> soooo it kinda messed my head up tbh :p Another student indeed went with the white td on black table thanks to your advice and it went well !
– Jaune
Dec 13 '18 at 12:57
add a comment |
As an alternative approach, consider coloring the table itself black and only coloring the corresponding tiles white:
window.onload = addElement;
function addElement() {
var tbl = document.createElement('table');
tbl.style.backgroundColor = 'black';
for (var i = 1; i < 9; i++) {
var tr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var td = document.createElement('td');
td.style.width = '25px';
td.style.height = '25px';
if (i % 2 == j % 2) {
td.style.backgroundColor = 'white';
}
tr.appendChild(td);
}
tbl.appendChild(tr);
}
document.body.appendChild(tbl);
}
And also, as Alex G said, it's much simpler to do the styling at the time the element is created instead of trying to iterate over them later. I understand the mindset of separating the logic and style portions of the code, but in this case it isn't really worth the added effort and complexity, and there are better ways to do it anyway.
And besides, if you wanted to separate the style from the logic, that's what CSS files are for. :P
I know I know, but the exercise being JS only, I didn't even had a .css or a <style> soooo it kinda messed my head up tbh :p Another student indeed went with the white td on black table thanks to your advice and it went well !
– Jaune
Dec 13 '18 at 12:57
add a comment |
As an alternative approach, consider coloring the table itself black and only coloring the corresponding tiles white:
window.onload = addElement;
function addElement() {
var tbl = document.createElement('table');
tbl.style.backgroundColor = 'black';
for (var i = 1; i < 9; i++) {
var tr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var td = document.createElement('td');
td.style.width = '25px';
td.style.height = '25px';
if (i % 2 == j % 2) {
td.style.backgroundColor = 'white';
}
tr.appendChild(td);
}
tbl.appendChild(tr);
}
document.body.appendChild(tbl);
}
And also, as Alex G said, it's much simpler to do the styling at the time the element is created instead of trying to iterate over them later. I understand the mindset of separating the logic and style portions of the code, but in this case it isn't really worth the added effort and complexity, and there are better ways to do it anyway.
And besides, if you wanted to separate the style from the logic, that's what CSS files are for. :P
As an alternative approach, consider coloring the table itself black and only coloring the corresponding tiles white:
window.onload = addElement;
function addElement() {
var tbl = document.createElement('table');
tbl.style.backgroundColor = 'black';
for (var i = 1; i < 9; i++) {
var tr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var td = document.createElement('td');
td.style.width = '25px';
td.style.height = '25px';
if (i % 2 == j % 2) {
td.style.backgroundColor = 'white';
}
tr.appendChild(td);
}
tbl.appendChild(tr);
}
document.body.appendChild(tbl);
}
And also, as Alex G said, it's much simpler to do the styling at the time the element is created instead of trying to iterate over them later. I understand the mindset of separating the logic and style portions of the code, but in this case it isn't really worth the added effort and complexity, and there are better ways to do it anyway.
And besides, if you wanted to separate the style from the logic, that's what CSS files are for. :P
window.onload = addElement;
function addElement() {
var tbl = document.createElement('table');
tbl.style.backgroundColor = 'black';
for (var i = 1; i < 9; i++) {
var tr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var td = document.createElement('td');
td.style.width = '25px';
td.style.height = '25px';
if (i % 2 == j % 2) {
td.style.backgroundColor = 'white';
}
tr.appendChild(td);
}
tbl.appendChild(tr);
}
document.body.appendChild(tbl);
}
window.onload = addElement;
function addElement() {
var tbl = document.createElement('table');
tbl.style.backgroundColor = 'black';
for (var i = 1; i < 9; i++) {
var tr = document.createElement('tr');
for (var j = 1; j < 9; j++) {
var td = document.createElement('td');
td.style.width = '25px';
td.style.height = '25px';
if (i % 2 == j % 2) {
td.style.backgroundColor = 'white';
}
tr.appendChild(td);
}
tbl.appendChild(tr);
}
document.body.appendChild(tbl);
}
answered Dec 12 '18 at 19:03
Abion47Abion47
6,51821639
6,51821639
I know I know, but the exercise being JS only, I didn't even had a .css or a <style> soooo it kinda messed my head up tbh :p Another student indeed went with the white td on black table thanks to your advice and it went well !
– Jaune
Dec 13 '18 at 12:57
add a comment |
I know I know, but the exercise being JS only, I didn't even had a .css or a <style> soooo it kinda messed my head up tbh :p Another student indeed went with the white td on black table thanks to your advice and it went well !
– Jaune
Dec 13 '18 at 12:57
I know I know, but the exercise being JS only, I didn't even had a .css or a <style> soooo it kinda messed my head up tbh :p Another student indeed went with the white td on black table thanks to your advice and it went well !
– Jaune
Dec 13 '18 at 12:57
I know I know, but the exercise being JS only, I didn't even had a .css or a <style> soooo it kinda messed my head up tbh :p Another student indeed went with the white td on black table thanks to your advice and it went well !
– Jaune
Dec 13 '18 at 12:57
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53741270%2fchessboard-in-pure-js%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
13
Quick tip - press F12 and you'll be able to see any errors in your console.
– markmoxx
Dec 12 '18 at 10:56