var lotsData = [
{
index: 0,
data: 'I want to be in HTML',
},
{
index: 1,
data: 'I dont' want to be in HTML',
}]
假设我更喜欢有一个带有数组的var。如何访问索引0,说它连接到单击事件并且我想使用数据:
$('.tab').live('click', function() {
console.log("I was clicked");
$('#fancy').text(WHAT GOES HERE TO ACCESS data from index 0?);
});
答案 0 :(得分:2)
jQuery是用Javascript编写的,Javascript本身提供了Array对象。
因此,访问数组的第0个元素是array_name[0]
在您的示例中,您将对象存储为数组的元素。您的对象包含“索引”属性,但要小心,您的“索引”属性与数组中的元素索引无关。您不应该包含“索引”属性......例如:
var lotsData = [
{ // this is the first array element, index value in the array is 0
index: 1,
data: 'I want to be in HTML',
},
{ // this is the second array element, index value in the array is 1
index: 0,
data: "I don't want to be in HTML",
}]
lotsData[0].data // value: 'I want to be in HTML'
更好的例子是:
var lotsData = [
{ // this is the first array element, index value in the array is 0
category: 'shoe',
detail: 'red'
},
{ // this is the second array element, index value in the array is 1
category: 'fruit',
detail: 'apple'
}]
lotsData[0].detail // value: 'red'
已添加:尾随逗号
请注意,虽然Javascript是一种强大的语言,但确实有它的怪癖。 一个重要的是尾随逗号,例如
...
index: 0,
data: "I don't want to be in HTML", // Trailing comma. DON'T DO THIS!
}]
问题是尾随逗号不是Javascript语言的正式部分。大多数JS引擎都支持它,但是一个非常重要的引擎不支持:Internet Explorer浏览器不支持尾随逗号,并且在遇到逗号时会死于悲伤。
由于其独特的处理方式,您的测试应始终包含IE。
我在IE 7中测试。
答案 1 :(得分:1)
$('.tab').live('click', function() {
console.log("I was clicked");
$('#fancy').text(lotsData[0].data);
});
当然这是假设您的索引的顺序正确(因为它们似乎来自您的示例数据)。
在这种情况下,没有理由保留数组对象的index
属性。使用简单的字符串数组会更容易使用。
例如
var lotsData = ["I want to be in HTML","I don't want to be in HTML"];
这样你只需要引用lotsData[0]
答案 2 :(得分:1)
首先不要使用.live(),除非你真的需要(http://jupiterjs.com/news/why-you-should-never-use-jquery-live)
但是如果你看一下.live()文档(http://api.jquery.com/live/),你会发现你可以将数据传递给.live(),这将在回调中提供。
.live(eventType,eventData,handler)
所以:
$('.tab').live('click',lotsData,function(event){
console.log('I was clicked');
$('#fancy').text(event.data[0].data);
});
这就是你在问什么?
或者你正在寻找一种迭代lotdata的方法,找出数组中的哪个项目.index = 0?
答案 3 :(得分:0)
你可以试试这个,而不是最好的解决方案:
$('.tab').live('click', function() {
console.log("I was clicked");
var realIndex;
for (var i = 0; i < lotsData.length; i++ )
{
if (lotsData[i].index == 0) {
realIndex = i;
break;
}
}
$('#fancy').text(lotsData[realIndex].index);
});