我希望根据包含单击按钮的表格行命名数组。
我得到了表格行:
var rowNum = $(this).parent().parent().index();
现在,我想命名数组并访问它。
var arrayName = 'arrTR' + rowNum;
window[arrayName] = new Array();
window[arrayName]["First"] = "Bob";
window[arrayName]["Last"] = "Roberts";
window[arrayName]["email"] = "me@there.com";
//The array should be accessible as arrTR__
alert(arrTR1["Last"]);
警报不起作用,所以我做错了。
我应该如何重构代码以允许我更新和访问数组?
答案 0 :(得分:1)
这样的事情怎么样?
$('.getinfo').click(function() {
var result = $('table tr:gt(0)').map(function(k, v){
return {
firstName: $(v).find('.fname').val(),
lastName: $(v).find('.lname').val(),
email: $(v).find('.email').val(),
}
}).get();
//update to show how you use the jQuery cache:
//1. set the value (using the body tag in this example):
$('body').data({ result: result });
//2. fetch it somewhere else:
var res = $('body').data('result');
});
不确定如何处理第一行。我在这种情况下跳过。您可以result[index]
访问每一行。
您可能已经注意到,这会保存每次点击的所有行。如果您只想使用单击的行,请使用this
指针。
答案 1 :(得分:1)
您的代码没有任何问题,唯一有错误的地方是警报,因为它没有在第一个单击按钮上定义
通过一点点更新看到这个小提琴
if(rowNum === 1)
alert(arrTR1["Last"]);
else if(rowNum === 2)
alert(arrTR2["Last"]);
答案 2 :(得分:1)
您对动态命名变量所做的事实上是创建这些变量的数组(每个rowNum
一个),但是给每个数组元素赋予它们各自的命名变量。
有一种更好的方法可以做到这一点。而不是生成一系列动态命名的变量,而是创建单个数组或对象。然后为要生成的每个动态命名变量添加元素或属性。
您的测试代码可能如下所示:
var arrTR = [];
var rowNum = 1;
arrTR[rowNum] = {
First: 'Bob',
Last: 'Roberts',
email: 'me@there.com'
};
alert( arrTR[1].Last );
或者,您可以使用Johan的答案中提到的$.data
做一些事情。但是,如果您使用纯JavaScript代码,请使用此处所述的单个数组,而不是多个动态命名的变量。
这样做有几个原因。它更清晰,更容易理解代码,当有大量条目时,它可能会更快,并且您根本不必污染全局命名空间。您可以在使用它的其他代码可见的任何范围内定义var arrTR = [];
。
数组和对象用于跟踪事物列表,因此请使用它们。