for循环中的jQuery .append()

时间:2015-09-08 03:50:19

标签: javascript jquery html css

我试着在这里寻找答案,但是对于刚刚开始像我这样学习JavaScript的人来说,与我的问题相关的所有问题都有点过于复杂。

我想根据用户输入创建一个带有js / jquery的div网格(例如:如果用户选择width = 16,那么他将看到一个16x16网格)。

现在,我想,我将添加一个带有var $smallDiv = $('<div class="smallDiv"></div>');的DOM元素

这是根据用户输入添加所需div数的循环:

function addDiv() {
$('#container').append($smallDiv);
}
for (i = 1; i <= divCounter * divCounter; i++){
addDiv();
}

问题是这总是只创建一个div。循环运行所需的次数,我已使用console.log()检查了这一点。所以它显然有效,但我感觉每次循环时,新的div会覆盖前一个。这不是我对.append()的期望。

我设法通过将$ smallDiv变量设为正常变量来解决问题(从其值中删除$,使其成为文本)但我很想知道这两个变量有何不同,为什么会这样?一个工作在上面的情况,但另一个没有。

让我轻松一点,我刚开始学习JS / jQuery。

2 个答案:

答案 0 :(得分:2)

在循环中,您将多次追加相同的dom元素引用($smallDiv),这意味着该元素只会添加一次。

相反,在循环的每次迭代中,您需要创建新实例 - 您可以使用.clone()来执行此操作。

function addDiv() {
    $('#container').append($smallDiv.clone());
}

答案 1 :(得分:0)

作为Arun P Johny解决方案的替代方案,这似乎也有效:

string sqlCon = @"Data Source=.\SQLEXPRESS;" +
                @"AttachDbFilename=|DataDirectory|\ChessDatabase.mdf;
                  Integrated Security=True;
                  Connect Timeout=30;
                  User Instance=True";
SqlConnection Con = new SqlConnection(sqlCon);
            if (Con.State == ConnectionState.Closed)
            {
                 Con.Open();
            }

这种方式不是相同的dom元素,而是我们使用一个简单的字符串进行追加。