2013-09-25 225 views
0

为什么类“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"); 

     } 
    } 
}        
+0

是否进入if语句?请作出jsFiddle ... –

+1

如果gameState.X [i]不是1-9,那么Spans ID是1-9,那么它不会找到跨度 – Anton

+0

ID在上下文页面上必须是唯一的,所以直接使用ID选择器,不需要'$(#“+ gameState.X [i])。addClass(”markX“);' –

回答

1

您需要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"); 
     } 
    } 
} 
+1

你不需要追加查找元素与jQuery – Anton

+0

嗨凯文!你错过了事实上,他可能会以不同的方式声明ID,也不同于他搜索它的方式。 –

1

奇怪的方式找到gameState[i]单元格。

$(html).find("#game .box#" + gameState.X[i]) 

上述不匹配你声明的ID ..你声明的元件ID作为i是从1至9的整数,但随后你希望ID匹配gameState.X [i]中。你也应该正确引用ID。

ID选择器只有在元素实际位于DOM中时才可以工作 - 在此阶段,您已经创建了它们,但未附加它们。在尝试&之前追加它们,可能是明智的。

此外,这是一个复杂的选择器 - 只需选择ID(不需要父级或类)就可以更简单地更有效率地使用&。

这里有一个更好的方式来做到这一点,用明确的“cellN”元素ID:

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; 
} 
+0

我忘记写的是我的函数buldTicTacToeUI()返回具有添加的类的html变量。是否有办法这样做,或者应该发生在我添加html变量的函数之外 –

+0

ID是DOM的一个属性,当你尝试在外部使用它时可能并不可靠。只要你使用你的工具(&build /返回一个DOM元素),而不是针对他们(尝试返回一个字符串)。 –

2

你可能只是不喜欢它,我想:

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>'; 
} 
相关问题