Как передать массив в атрибут jQuery .data () - PullRequest
80 голосов
/ 20 мая 2011

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

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

, а затем получить его так:

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

alert(stuff[0]);

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

JSFiddle Link: http://jsfiddle.net/ktw4v/3/

Ответы [ 4 ]

135 голосов
/ 20 мая 2011

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

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

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

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

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

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

12 голосов
/ 20 мая 2011

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

Так что 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.

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

0 голосов
/ 20 мая 2011

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

$(function(){
    $.data($("#aaa")[0],"stuff",{"aa":['a','b','c']});
    var stuff = $.data($("#aaa")[0],"stuff").aa;
    alert(stuff[0]); //returns "a"
});
0 голосов
/ 20 мая 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...