在javascript中,我正在加载一个json对象,并尝试更新其中的值。 html中的元素具有与其路径匹配的id,例如:“values.one”元素:
{ “值”:{ “一个”: “VAL1”, “二”: “val2的”}, “OtherStuff”: “不管”}
与此元素有关:
<input id="values_one" type="text">val1</div>
当这个元素失去焦点时,我想获取“#values_one”的值(使用jQuery)并设置使用我的json对象中的任何值。我已经弄清楚如何从现有的json对象中获取值(请参阅下面我的可怕代码),但我最终只得到了值,因此设置它不会影响json对象。关于如何做到这一点的任何建议(假设我不知道失去焦点的元素是“values_one”,“values_two”,还是可能映射到json对象的任何其他元素)?
这是我此时的代码(不起作用),但很高兴废弃它以实际工作:
var saveEdit = function() { var data = getJson(); pathElements = $(this).attr('id').split('_'); length = pathElements.length; var path = data[pathElements[0]]; index = 1; while (index < length) { path = path[pathElements[index]]; length -= 1; } path = $(this).text(); //resets "path", but not data.values.one $(this).unbind(); }
答案 0 :(得分:1)
循环一个比长度短的数据,以便获得包含与最后一个标识符匹配的属性的元素:
var path = data;
for (index = 0; index < length - 1; index++) {
path = path[pathElements[index]];
}
path[pathElements[length - 1]] = $(this).text();
答案 1 :(得分:1)
首先,没有“JSON对象”这样的东西。是的,我是迂腐的,但你应该有一个“JSON字符串”或“Javascript对象”。
看起来您正在尝试通过事件修改 JSON字符串,而不仅仅是让对象本身可用于引用和修改。为什么要把它保存在一个字符串中呢?当您准备好导出数据(可能保存到数据库),然后只需stringify();
对象并继续使用。
请查看以下jsFiddle,了解可以构建的工作实现:http://jsfiddle.net/julianlam/WRZPF/