2016-11-09 136 views
0

我正在循环一个数组,但我得到了数组长度的多个实例。有没有在 -jQuery什么是解决这个`关闭`的正确方法

var array = [{ 
 
    name: 'name1', 
 
    value: [1, 2, 3, 4] 
 
}, { 
 
    name: 'name2', 
 
    value: ['a', 'b', 'c', 'd'] 
 
}, { 
 
    name: 'name3', 
 
    value: ['a', 'b', 'c', 'd'] 
 
}]; 
 

 
var makeDropDown = function() { 
 
    var newhtml = function(value) { 
 
    var name = $('<td/>', { 
 
     text: value.name 
 
    }); 
 
    var build = $('<tr/>').append(name).append($('<td/>')); 
 
    $("tbody").append(build); 
 
    } 
 

 
    if (!array.length) 
 
    return; 
 

 
    $.each(array, function(index, value) { 
 
    newhtml(value); //my try to avoid clousure not works! 
 
    }) 
 
} 
 

 
makeDropDown();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <theader> 
 
    <th>S.No</th> 
 
    <th>Name</th> 
 
    </theader> 
 
    <tbody></tbody> 
 
    <tfooter></tfooter> 
 
</table>

构建的方式来避免这种情况的jQuery的?

+0

问题在'newHtml'功能 –

+0

那是什么?你能弄清楚吗? – 3gwebtrain

+0

将索引作为参数传递给'newhtml(value);'。所以它变成'newhtml(index);' –

回答

1

他们没有theadertfooter它必须是theadtfoot

var array = [{ 
 
    name: 'name1', 
 
    value: [1, 2, 3, 4] 
 
}, { 
 
    name: 'name2', 
 
    value: ['a', 'b', 'c', 'd'] 
 
}, { 
 
    name: 'name3', 
 
    value: ['a', 'b', 'c', 'd'] 
 
}]; 
 

 
var makeDropDown = function() { 
 
    var newhtml = function(value) { 
 
    var name = $('<td/>', { 
 
     text: value.name 
 
    }); 
 
    var build = $('<tr/>').append(name).append($('<td/>')); 
 
    //console.log(build); 
 
    $("tbody").append(build); 
 
    
 
    } 
 

 
    if (!array.length) 
 
    return; 
 

 
    $.each(array, function(index, value1) { 
 
    newhtml(value1); //my try to avoid clousure not works! 
 
    }) 
 
} 
 

 
makeDropDown();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <thead> 
 
    <th>S.No</th> 
 
    <th>Name</th> 
 
    </thead> 
 
    <tbody></tbody> 
 
    <tfoot></tfoot> 
 
</table>

0

您的代码没有按预期工作,因为浏览器“修复”了您的标记并添加了另一个TBODY元素。

无论是固定的标记,或者使TBODY身份:

<tbody id="root"></tbody> 

,改变newhtml到:

... 
$("tbody#root").append(build); 

另外,不要避免closures。他们是一个好事 :)

+0

得到相同的结果,你可以更新与工作示例? – 3gwebtrain

相关问题