2014-12-01 29 views
1

我有一个函数,检查div,如果它存在它填充与JSON数组匹配的数据。 Div和数据具有相同的密钥,所以我希望能够将这些字符串放在一个字符串中,以获得更优雅的解决方案。但是,试图将字符串元素应用于数据键的最后一个元素似乎不起作用。我得到“无法读取属性‘0’的未定义”传递字符串元素到数据键

原始代码:

$.getJSON('myDataUrl', function(data) { 
if ($("#title").length){document.getElementById("title").innerHTML=data.title}; 
if ($("#noun").length){document.getElementById("noun").innerHTML=data.noun}; 
if ($("#_id").length){document.getElementById("_id").innerHTML=data._id}; 
if ($("#owner_id").length){document.getElementById("owner_id").innerHTML=data.owner_id}; 
}); 

更“优雅”的解决方案,我试图达到:

$.getJSON('myDataUrl', function(data) { 
var contentString = "name,noun,_id,owner_id"; 
var splitContent; 
splitContent = contentString.split(","); 
for(i = 0; i < splitContent.length; i++) 
      {if ($("#" + splitContent[i]).length){ 
       document.getElementById(splitContent[i]).innerHTML=data.splitContent[i]; 
       }; 
       } 
+0

你并不需要检查的长度,如果使用jQuery – 2014-12-01 19:18:51

+0

我去这个公认的答案,以检查是否一个div存在http://stackoverflow.com/questions/31044/is-there-an-exists-function-for-jquery – 2014-12-01 19:24:46

+1

你不需要检查使用jQuery的元素存在,因为空的jQuery对象仍然可以处理而不会抛出错误 – 2014-12-01 19:26:34

回答

2

看起来应该是足够:

$.getJSON('myDataUrl', function (data) { 
    for (var k in data) { 
     $("#" + k).html(data[k]); 
    } 
}); 
+0

应该是'data [k]'? – Sonny 2014-12-01 19:24:08

+0

@Sonny Thx,更正 – 2014-12-01 19:25:04

+0

工程就像一个魅力。谢谢。让我的'优雅'想法看起来像我的高跟鞋奶奶。一旦时限到期,我会标记为已回答 – 2014-12-01 19:27:40

0

问题是data.splitContent[i]。那应该是data[splitContent[i]]。也就是说,您想要使用当前密钥(例如name)作为数据对象中的密钥。