2013-11-24 3 views
0

Этот код читает первую букву имени массива, но я хочу, чтобы он читал первый объект в этом массиве. Предполагается прочитать атрибут массива элементов (что он делает), затем получить доступ к первому в этом массиве. Это мой первый опыт работы с массивами, так что это может быть очень глупый вопрос :)Доступ к массиву Javascript динамически

Спасибо кучи.

//array of strategies 
//leads 
var leads = new Array(); 
leads[0] = "Test 1"; 
leads[1] = "Test 2"; 
leads[2] = "Test 3"; 

$("button").click(function() { 
    //get category 
    var currentCat = $(this).attr("array"); 
    $("#danWell h1").text($(this).attr('id')); //don't worry about this line 
    $("#danWellContent").text(currentCat[0]); 
}) 
+2

У вас есть рабочий Plunk или JSFiddle? Трудно сказать, в чем проблема, без кода. –

+0

'$ (this) .attr (" array ");' ??? Поместите полный пример кода прямо в свой вопрос. Как «ведет» работать в вашу ситуацию? –

+0

'currentCat' будет значением атрибута, который может быть только строкой. Где массив попадает в него? – Quentin

ответ

1

Я предполагаю, что ваш вопрос в том, что у вас есть строка, полученная вами из атрибута, и вы хотите получить доступ к переменной в вашем javascript с этим именем. Обычно это делается с помощью object[varName], где varName - это переменная javascript, и это позволяет вам получить доступ к объекту с именем справки по имени в этой переменной.

Если переменная вы хотите получить доступ является глобальной переменной, то вы можете получить доступ к нему через строку путем индексации Офф-window объект, поскольку все глобальные переменные свойства window объекта:

var currentCat = $(this).attr("array"); 
var item = window[currentCat][0]; 

Если переменная, к которой вы хотите получить доступ, не является глобальной переменной, тогда вам нужно сделать ее собственностью на каком-то известном объекте, чтобы вы могли использовать эту же технику.

var myObject = {}; 
myObject.leads = []; 
myObject.leads[0] = "Test 1"; 
myObject.leads[1] = "Test 2"; 
myObject.leads[2] = "Test 3"; 

var currentCat = $(this).attr("array"); 
var item = myObject[currentCat][0]; 

FYI, то рекомендуется способ хранения пользовательских атрибутов в вашем HTML является префикс пользовательского свойства с "data-", а затем вы можете использовать JQuery-х .data() для получения пользовательского атрибута, и вы также будут совместимы с Спецификация HTML5 для пользовательских атрибутов.

<div data-array="leads"> 

var currentCat = $(this).data("array"); 
+0

Это сработало. Спасибо. Я теперь храню свой массив в объекте, и я могу легко получить к нему доступ! Я также использую массив данных, спасибо за подсказку! –

1

Похоже, вы хотите сохранить массив как один из атрибутов вашего элемента. Я рекомендую вам использовать .data() вместо атрибутов для чтения и записи значений массива. Это предотвращает добавление лишних атрибутов и позволяет получить данные с нужным типом.

Чтобы сохранить массив (где $ele относится к вашему элементу Jquery):

var array = []; 
array[0] = "Test"; 
array[1] = "Test"; 
$ele.data("array", array); 

Чтобы получить массив:

var array = $ele.data("array"); 

Если вы храните массив как data-array атрибут вашего элемента, .data() вызов выше работает точно так же.

Смежные вопросы