jquery
2014-10-07 61 views 0 likes 
0

我有这样的JSON:jQuery的获取一个JSON的最后一个索引

{"1":"politico","2":"cantante","3":"show girl"} 

而这个功能:

function loadProperties(parent_id) { 
    var prop_select = $('#properties'); 
    var url = '/index.php?ry6vo4cIDRptkGe2Qyx8CMLrxAKWaJnyLLSToeP8cAA=DsJAU2F4Khnb4bankxAsQdogjwpD0tFFPOf43AnCoZ4&DsJAU2F4Khnb4bankxAsQdogjwpD0tFFPOf43AnCoZ4=HNlevL7EtzTP-tBN84ZzBMbFNXI-oegccfwSB3NYgFQ'; 
    $.post(url, 
     { 
      jqaz: "get_properties", 
      parent_id: parent_id 
     },function(options,status){ 

      var obj = JSON.parse(options); 
      var len = obj.length; 
      console.log(len); 

      if(options) { 

      var i = 0; 
      $.each(options, function(val, text) { 

       var multilevel = parent_id !== 0 ? "multilevel" : ""; 
       var option = $('<option data-parent="' + parent_id + '" class="prop-option ' + multilevel + '"></option>').val(val).html(text); 

       if(parent_id === 0) 
       prop_select.append(option); 
       else { 
       if(i === 0) { 
        $('#properties option[value="' + parent_id + '"]').after('<ul>' + option); 
       }else if(i === last){ 
        $('#properties option[value="' + parent_id + '"]').after(option + '</ul>'); 
       }else{ 
        $('#properties option[value="' + parent_id + '"]').after(option); 
       } 
       } 
       i++; 
      }); 
      } 
      $('.selectpicker').selectpicker('refresh'); 
     }, 'json'); 
} 

我需要知道哪些是选项JSON对象中的最后一个索引,以在追加期间关闭元素。

问题是我无法计算长度。我总是得到“未定义”。 我试图使用JSON.parse没有运气。

感谢您的帮助

回答

1

好了,你没有真正处理指标,只是按键,虽然实际上是字符串,代表数字。你可以得到的最高数值是这样的:

var maxKey = Object.keys(options).map(function(key) { return +key; }).sort().pop();

可以那么当然用它来获得的价值,你想:

var value = options[maxKey];


编辑:我想我误解了你的问题。如果您只需知道对象的“长度”,可以这么说,您可以使用var len = Object.keys(obj).length;

+1

['Object.keys'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys)仅支持IE9 + – mithunsatheesh 2014-10-07 15:29:43

+0

@mithunsatheesh +1这是真的,但也非常容易填充。 – jmar777 2014-10-07 19:17:18

1

您正在通过查找“最后”属性使其复杂化。打造为一个字符串,然后追加一次过的所有选项...

var html = ""; 

$.each(options, function(val, text) { 
    var multilevel = parent_id !== 0 ? "multilevel" : ""; 
    var option = '<option value="' + val + '" data-parent="' + parent_id + '" class="prop-option ' + multilevel + '">' + text + '</option>'; 
    html += option; 
}); 

prop_select.html(html); 

的jsfiddle例如...http://jsfiddle.net/r7opf39y/

除了作为更容易地管理这种方式,它也会给如果您有很多选项,性能会有相当大的提升,因为多个附件的速度比一个大。

相关问题