存储Jquery参考

时间:2015-07-30 13:31:13

标签: javascript jquery arrays object

是否可以在数组或对象中存储对元素的引用而不在元素上使用唯一ID?

我在另一个表中存储子表时遇到问题,以便稍后引用。我用这段代码逐个获取表格:

$(this).parent('tr').parent().find('.tableSomeTable');

唯一的解决方案是在每个元素上都有唯一的id并使用.selector方法吗?

我的更多代码。升技简化。

  var rows = [];
  var historyLoad;

 $(document).on("click", '.details-control', function (e) {
    var t = $(this);
    var tr = t.closest('tr');
    var row = t.parent().parent().parent().DataTable().row(tr);
    var id = t.closest('tr').attr('id');

    var object = {
        id: id,
        btnHistory: t.parent('tr').next().find('#btnHistory'),
        tblHistory: t.parent('tr').parent().find('.tableHistory'),
        historyLoad: historyLoad
    };

   if ($.inArray(id, rows) > -1) {
     loadData = false;
   }
   else {
       loadData = true; 
       loadHistory(object);
       rows.push(object);
    }
};

这是我在检索正确元素时遇到问题的地方。而且我还想将ajaxHistory元素保存到我的对象(工作正常)。 这段代码不起作用,但是如果我把它改成$(result.btnHistory.btnHistory.selector),我就得到了这个对象。但是对于多行来说,这似乎并不是很好。

  function loadHistory(result) {
      result.ajaxHistory = $.ajax({
              ...
         beforeSend: function () {
            $(result.btnHistory).html(<loading txt>);
            $(result.tblHistory).find('tbody').html(<loading txt>);
        },
           ....
         success: function (data) {
            if (data.TotalRecordCount > 0) {
                $(result.tblHistory).find('tbody').html('');
                $.each(data.Records, function (e, o) {
                     $(result.tblHistory).find('tbody').append(<data>)
                  });
            }
            else {
                $(result.tblHistory).find('tbody').html(<txt no records>);
            }
            $(result.btnHistory).html(<txt loading done>));
        },

2 个答案:

答案 0 :(得分:1)

.find() method返回jQuery object。所以答案是,是的,您可以将此返回对象存储在变量中:

var $yourObject = $(this).parent('tr').parent().find('.tableSomeTable');

答案 1 :(得分:1)

首先,如果您要查找父表,请尝试

    var $myObj = $(this).closest('table.tableSomeTable');
而不是导航父母。

至于存储jQuery引用,定义一个变量然后存储它。上面会将对象存储在$ myObj中,但这是本地范围的。如果您需要一个全局变量,那么全局定义它,并在此处指定它。如果要将其定义为对象中的属性,则以该方式定义它。在这一点上,它真正归结为范围问题。

编辑:刚看到你添加的内容。

首先,不要将其命名为“对象”。这可能会遇到关键词问题。改为使用var myObj或类似的。接下来,object.btnHistory是对jQuery对象的引用。因此,当您将其传递给loadHistory时,您不需要再次应用$(...)。只需直接使用引用:result.btnHistory.html(...)。进入的一个好习惯就是在jQuery变量前加上$,所以你记得它已经是一个jQuery变量了。