jQuery脚本运行不正常

时间:2016-01-30 19:21:46

标签: javascript jquery

我正在制作一个小型个人应用,用于使用jquery创建html表。我有这个脚本(我从这里借来的地方并稍微调整一下),只需点击一下按钮,就可以在表格末尾添加一个新列。

function addJSONKey(){
var first = true;

$('#jsonTable').find('tr').each(function(){ 
    $(this).find('th').eq(-1).after(
        '<th contentEditable>New Key</th>'
    );
        if(first === true){
            first = false;      
            // the function does not execute this statement 
            // even though the debugger breaks here. 
            $(this).find('td').eq(-1).after(
                '<td>Frist</td>'
            ); 
        } else {                
            $(this).find('td').eq(-1).after(
                '<td contentEditable>Not First</td>'
            );
        }
}); 
}

我希望脚本要做的是,第一行与其他行不同,但是如果我运行脚本,它会在任何地方返回Not First行。

3 个答案:

答案 0 :(得分:1)

你过分复杂了一点。您可以通过索引区分行并相应地追加新的th或td:

&#13;
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Add</button>

<table id="jsonTable">
    <tr>
        <th>One</th>
    </tr>
    <tr>
        <td>Data</td>
    </tr>
    <tr>
        <td>Data</td>
    </tr>
</table>
&#13;
DataTable table = new DataTable();
table.Columns.Add("Title");
dataGridView1.DataSource = table;
&#13;
&#13;
&#13;

答案 1 :(得分:0)

替换你的方法
function addJSONKey() {
    $('#jsonTable').find('tr').each(function(i) {
    	// Header row
        if (i === 0) {
            $(this).find('th').eq(-1).after('<th contentEditable>New Key</th>');	
        }
        // First data row
        else if (i === 1) {
            $(this).append('<td>Frist</td>');
        } 
        // Not header and not the first row 
        else {
            $(this).append('<td contentEditable>Not First</td>');
        }
    });
}

$('button').click(addJSONKey);

基本上你的布尔优先只对第一行的第一列是真的。

答案 2 :(得分:0)

在您的代码中,您将标题的第一行计为first,您想要添加到第一行非标题行,即第二行,即索引1,因为它是&#39; s 0基于:)

&#13;
&#13;
function addJSONKey(){
$('#jsonTable').find('tr').each(function(row){ 
    $(this).find('th').eq(-1).after('<th contentEditable>New Key</th>');
        if(row == 1){
            // the function does not execute this statement 
            // even though the debugger breaks here. 
            $(this).find('td').eq(-1).after('<td>Frist</td>'); 
        } else {                
            $(this).find('td').eq(-1).after(
                '<td contentEditable>Not First</td>'
            );
        }
}); 
}
//addJSONKey();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="jsonTable">
  <tr><th>a</th><th>b</th></tr>
  <tr><td>10</td><td>11</td></tr>
  <tr><td>20</td><td>21</td></tr>
</table>
<button onclick="addJSONKey()">go</button>
&#13;
&#13;
&#13;