2011-08-29 36 views
1
var lotsData = [ 
    { 
     index: 0, 
     data: 'I want to be in HTML', 

    }, 
    { 
     index: 1, 
     data: 'I dont' want to be in HTML', 
    }] 

比方說我更喜歡在數組中使用一個var。如何訪問索引0,說其連接到一個點擊事件,我想用數據:如何在JavaScript中訪問數組中的數據

$('.tab').live('click', function() { 
      console.log("I was clicked"); 
         $('#fancy').text(WHAT GOES HERE TO ACCESS data from index 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

+0

感謝。我是一個Rubyist索引功能相同的方式 –

+0

@JZ感謝您的支票!我也是Rubyist,因爲我學習越來越多的Javascript而感到高興 - 它是一個功能強大,功能全面的語言。當然,它不是紅寶石,但它比它(老)的聲望讓我相信的能力強得多。 –

+0

@JZ,請注意關於尾隨逗號的答案... –

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]

0

你可以試試這個,不是最好的solutuion:

$('.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); 
}); 
1

首先不使用.live ()除非你真的需要(http://jupiterjs.com/news/why-you-should-never-use-jquery-live

但是,如果您查看.live()文檔(http://api.jquery.com/live/),您將看到可以將數據傳遞給.live()的事實,該數據將在回調中提供。

.live(EVENTTYPE,EVENTDATA,處理程序)

所以:

$('.tab').live('click',lotsData,function(event){ 
    console.log('I was clicked'); 
    $('#fancy').text(event.data[0].data); 
}); 

是你要求什麼呢?

或者你正在尋找一種方法來遍歷lotsdata並找出數組中的哪個項目.index = 0?

+0

感謝您的文章鏈接的澄清 –