为什么我的内部对象中的值是空白的?

时间:2016-12-12 23:02:43

标签: javascript jquery html javascript-objects

我只是想获得像这样的JSON输出

{
"SW Reqs or Problem Analysis & Estimate": {
    "Estimate_Days": "I",
    "Performers": "am",
    "Percent_Done": "so",
    "Work_Done": "frustrated",
    "Remaining_Work": "this",
    "Comments": "won't"
},
"SW Requirements Doc ( in DOORS)": {
    "Estimate_Days": "WORK",
    "Performers": "PLEASE",
    "Percent_Done": "HELP",
    "Work_Done": "AAHHHHH",
    "Remaining_Work": "HHHHHH",
    "Comments": "HHHHHH!!!!"
}, ...etc

但我的json看起来像这样

{
"SW Reqs or Problem Analysis & Estimate": {
    "Estimate_Days": "",
    "Performers": "",
    "Percent_Done": "",
    "Work_Done": "",
    "Remaining_Work": "",
    "Comments": ""
},
"SW Requirements Doc ( in DOORS)": {
    "Estimate_Days": "",
    "Performers": "",
    "Percent_Done": "",
    "Work_Done": "",
    "Remaining_Work": "",
    "Comments": ""
},...etc

这是我的剧本,

$('#test').click(function(){
    var content = {};
    var inner = {};
    $('.Data').each(function() {

        var row = $(this).siblings(":first").text();
        var id = $(this).attr('id').split('~');
        var blah = id[0];
        var html = $(this).html();
        content[row] = inner;
        inner[blah] = html;
    });
    var hey = JSON.stringify(content);
    console.log(hey);
});

它遍历表中的<td>。如果我只测试 console.log(html)console.log(inner[blah])它会从<td>输出我需要的数据,但出于某种原因,当我将其显示为空白时,我会尝试输出content

这条线有问题吗?

content[row] = inner;
inner[blah] = html;

这是使用密钥content创建对象row的正确方法,其值为另一个名为inner的对象,其中包含密钥blah和值html?这不应该是这么难。我不得不遗漏一些东西。我读到你在拥有多维对象时也可以使用JSON,但是我无法弄清楚为什么字符串在&#34; Estimate_Days&#34;之后。这是空白的。请帮助。

编辑:这里有几行生成html的php循环:

foreach($group_results as $group){
    echo '<tr><td class="Row_Title'.$group['Group_ID'].'">'.$group['Group_Name'].'</td>';
    echo '<td class="Data" contenteditable="true" name="Estimate_Days~'.$group['Group_ID'].'" id="Estimate_Days~'.$group['Group_ID'].'"></td>';
    echo '<td class="Data" contenteditable="true" name="Performers~'.$group['Group_ID'].'" id="Performers~'.$group['Group_ID'].'"></td>'; ...etc

1 个答案:

答案 0 :(得分:2)

更新:请注意,您发布的循环代码中的td内容似乎为空。很可能这就是为什么一切都是空白的,但它掩盖了对象引用的其他问题。

正如我所提到的,您每次都在重复使用inner的相同实例。你真正想做的是找到每个Row_Title单元格,然后为每个单元格填充一行,剩下的兄弟姐妹。我建议使用以下javascript(用一些示例HTML来演示)。这循环遍历每个“行”并将外部数组设置为行标题的标题,然后遍历每个类型数据的兄弟,并相应地设置该内部数组的各个属性。

$('#test').click(function(){
    var content = {};
    $('.Row_Title').each(function() {
      var row = $(this).text();      
      content[row] = {};
      $(this).siblings(".Data").each(function() {      	
        var id = $(this).attr('id').split('~');
        blah = id[0];
        var html = $(this).html();
        content[row][blah] = html;        
      });
    })
    var hey = JSON.stringify(content);
    console.log(hey);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<table>
  <tr>
    <td class="Row_Title">Title 1</td>
    <td class="Data" id="Field1~1">Field1Value1</td>
    <td class="Data" id="Field2~1">Field2Value1</td>
  <tr>
    <td class="Row_Title">Title 2</td>
    <td class="Data" id="Field1~2">Field1Value2</td>
    <td class="Data" id="Field2~2">Field2Value2</td>
  </tr>
</table>
<button id="test">
Go
</button>