是否可以在数组或对象中存储对元素的引用而不在元素上使用唯一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>));
},
答案 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变量了。