Подтвердить что ты не робот

Как передать массив в атрибут jQuery.data()

Хорошо, поэтому я хочу передать очень простой массив в серверную часть данных jquery так:

<div data-stuff="['a','b','c']"></div>

а затем выполните следующие действия:

var stuff = $('div').data('stuff');

alert(stuff[0]);

Почему это появляется для предупреждения '[', а не 'a' (см. ссылку JSfiddle)

JSFiddle Ссылка: http://jsfiddle.net/ktw4v/3/

4b9b3361

Ответ 1

Он обрабатывает вашу переменную как строку, нулевой элемент которой [.

Это происходит потому, что ваша строка не действительный JSON, который должен использовать двойные кавычки как разделитель строк вместо одиночных кавычек. Затем вам нужно будет использовать одиночные кавычки, чтобы разграничить все значения атрибута.

Если вы исправите свои кавычки, ваш исходный код работает (см. http://jsfiddle.net/ktw4v/12/)

<div data-stuff='["a","b","c"]'> </div>

var stuff = $('div').data('stuff');

Когда jQuery видит действительный JSON в атрибуте данных, он автоматически распакует его для вас.

Ответ 2

Объявление его как атрибута означает, что это строка.

Итак, stuff[0] будет эквивалентен: var myString = "['a','b','c']"; alert(myString[0]);

Вам нужно сделать так:

<div data-stuff="a,b,c"></div>

var stuff = $('div').data('stuff').split(',');
alert(stuff[0]);

Retraction: разбор jQuery терпит неудачу, потому что он не соответствует правилам parseJSON.

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

Ответ 3

Как выяснили другие, значение рассматривается как строка, поэтому возвращается "[". Пожалуйста, попробуйте это (aaa - это имя div, и я достал данные):

$(function(){
    $.data($("#aaa")[0],"stuff",{"aa":['a','b','c']});
    var stuff = $.data($("#aaa")[0],"stuff").aa;
    alert(stuff[0]); //returns "a"
});

Ответ 4

Разный подход размещен на jsfiddle; var stuff = $('div').data('stuff'); stuff - строка с 0-м символом как '['

Ну, var stuff = eval($('div').data('stuff')); должен получить вам массив