【问题标题】:Why are the values in my inner object blank?为什么我的内部对象中的值是空白的?
【发布时间】:2017-04-27 22:13:47
【问题描述】:

我只是想得到这样的 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>s。如果我只测试 console.log(html)console.log(inner[blah]) 它从 <td>s 输出我需要的数据,但由于某种原因,当我尝试输出 content 时它显示为空白。

这条线有问题吗?

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

这是创建一个对象content 的正确方法吗?键为row,其值为另一个名为inner 的对象,其键为blah,值为html?这不应该这么难。我必须错过一些东西。我读到,当您拥有多维对象时,您不妨使用 JSON,但我无法弄清楚为什么“Estimate_Days”等之后的字符串是空白的。请帮忙。

编辑:这是生成 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

【问题讨论】:

  • 把你所有的html js代码放在jsfiddle.net中(和菜单>保存并给我们链接)
  • 我将更新我的问题并将所有内容发布在那里,那里有一些我无法在小提琴中真正重现的 php
  • 如果只是一个有几行的静态示例,看看 HTML 会很好。
  • 可能的问题:content 的所有值都指向同一个单数 inner 对象。
  • @stephen.vakil 嗯,我应该在其他地方实例化内部对象吗?就像也许做第二个循环?比如实例化content,通过每个&lt;tr&gt;开始一个循环,在那里实例化inner,然后通过&lt;td&gt;s用循环中的值填充它,然后将它添加到content对象中并重复?

标签: javascript jquery html javascript-objects


【解决方案1】:

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

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

$('#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>

【讨论】:

  • 哇,斯蒂芬真棒,我现在要开始处理这个了。是的,它们是空的,但它们是可内容的,我让用户在其中输入内容。
  • 我认为这会奏效,太棒了,非常感谢。
猜你喜欢
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 2017-07-06
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
相关资源
最近更新 更多