Почему классы "markO" и "markX" не добавляются к найденному элементу?
function buldTicTacToeUI(gameState) {
var html ='<div id="game">';
for (var i = 1; i <= 9; i++) {
html += ("<span id=" + i + " class='box' />");
}
html += '</div>';
if (gameState.X != null) {
for (var i = 0; i < gameState.X.length; i++) {
$(html).find("#game .box#" + gameState.X[i]).addClass("markX");
}
}
}
Вы могли бы просто сделать это, как я предполагаю:
function buldTicTacToeUI(gameState) {
var html = '<div id="game">';
for (var i = 1; i <= 9; i++) {
html += ("<span id=" + i + " class='box" + (gameState.X != null ? " markX" : "") + "' />");
}
html += '</div>';
}
Странный способ найти gameState[i]
.
$(html).find("#game .box#" + gameState.X[i])
Вышеупомянутое не соответствует объявленным вами идентификаторам.. вы объявили идентификаторы элементов, поскольку i
является целым числом от 1 до 9, но тогда вы ожидаете, что id будет соответствовать gameState.X [i]. Вы должны также указать идентификатор должным образом.
Селекторы ID могут работать только тогда, когда элементы фактически находятся в DOM - на данном этапе вы их создали, но не добавили. Добавляя перед тем, как вы попытаетесь найти их, вероятно, было бы разумно.
Кроме того, это сложный селектор, где просто выбор по идентификатору (без требования родителя или класса) будет проще и эффективнее.
Здесь лучший способ сделать это, используя однозначные идентификаторы элементов cellN:
function buldTicTacToeUI (gameState) {
var html ='<div id="game">';
for (var i = 1; i <= 9; i++) {
html += "<span id='cell"+i+"' class='box' />";
}
html += '</div>';
var result = $(html);
result.appendTo( 'body'); // or wherever you want to put it
if (gameState.X != null) {
for (var i = 0; i < gameState.X.length; i++) {
var cellNum = gameState.X[i]; // is this a cell number?
$("#cell"+cellNum).addClass("markX");
}
}
return result;
}
Вам нужно append
строку html в DOM, прежде чем найти ее с помощью jQuery.
function buldTicTacToeUI(gameState) {
var html ='<div id="game">';
for (var i = 1; i <= 9; i++) {
html += ("<span id=" + i + " class='box' />");
}
html += '</div>';
$(document).append(html); //append where you prefer
if (gameState.X != null) {
for (var i = 0; i < gameState.X.length; i++) {
$("#game .box #" + gameState.X[i]).addClass("markX");
}
}
}