按字符串查找对象索引

时间:2011-06-24 15:13:59

标签: javascript jquery object

我有许多html输入和一个包含大量信息的非常大的对象。

其中许多输入直接链接到对象中的特定字符串。 E.g:

<input name="alpha_beta_gamma" type="input" val="newstring" />

  obj = {
         alpha: {
             beta: {
                 gamma: 'oldString'
             }
         },
         stuff2: {
             whatever: {
                 weathertoday: 'rainy',
                 sun: false
             },
             phone: '1234567'
         }
  }

值“sun”的复选框字段的名称为“stuff2_whatever_sun”,而“phone”字段的名称为“stuff2_phone”,“gamma”输入字段的名称为“alpha_beta_gamma”。

希望你们能得到我:)

...我将使用jQuery focusout事件:

 $('input.specialClass').live('focusout', function(){
      obj[whatevercomeshere] = $(this).val();
 });

3 个答案:

答案 0 :(得分:2)

$('input.specialClass').live('focusout', function(){
  var name = $(this).attr('name');
  var o = obj, parts = name.split("_");
  $.each(parts, function(k, v) {
    if(k == parts.length - 1) {
       o[v] = $(this).val();
    } else {
       o = o[v];
    }
  });  
});

答案 1 :(得分:1)

您可能想要使用eval

$('input').each( 
   function() {
        var $this = $(this);
        $this.val(eval("obj." + $this.attr('name').replace(/_/g, '.'));
   }
);

答案 2 :(得分:0)

这是一种方法:

    var obj = {},
        name2json = function(o, name, val){
            var prop = name.splice(0, 1);
            o[prop] = o[prop] || {};
            if(name.length === 0){
                o[prop] = val;
            }else{
                name2json(o[prop], name, val);
            }
        };
    $('input.specialClass').live('focusout', function(){
        name2json(obj, this.name.split('_'), this.value);
     });