2013-07-17 1 views
-1

Если я знаю, что определенное свойство данных существует в элементе, и это объект, как я могу хранить что-то как новое свойство этого объекта данных?Как установить свойство внутри свойства в jQuery data()

К примеру, у меня есть DIV:

<div id="theDiv" data-test1="{string: 'test 1 data'}"></div> 

И я пытаюсь установить на нем данные, как это:

div.data(["test1"]["number"], 1); 

Но это не получает меня нигде. И div.data(["test1"]["number"]) = 1; получает левую сторону в ошибке присваивания.

http://jsfiddle.net/VM8VW/

+1

'[" test1 "] [" number "]' не имеет смысла в javascript. Я даже не знаю, с чем вы столкнулись. –

+0

'[" test1 "] [" number "]' оценивается как 'undefined', потому что это выражение пытается получить доступ к индексу (' "number" ') 1-элементного массива (' ["test1"] '). Не могли бы вы уточнить, чего вы пытаетесь достичь? –

+0

Это вы искали? http://jsfiddle.net/VM8VW/1/ ваш json был недействителен, и я предположил, что вы имели в виду в моем первом комментарии –

ответ

5

Вы должны получить значение, а затем повторно сохранить его:

div.data('test1', function(prev) { 
    prev.number = 1; 
    return prev; 
}(div.data('test1'))); 

Это вероятно безопасно просто сделать это:

div.data('test1').number = 1; 

но такого рода вещь дает мне завещания.

редактировать — если вы хотите JQuery, чтобы понять ваши JSON, как таковой, он должен быть действительным:

<div id="theDiv" data-test1='{"string": "test 1 data"}'></div> 

двойные кавычки только и имена свойств также должны быть указаны.

+0

Это не ваша вина, но ни одна из них не работает, потому что 'div.data (" test1 ")' является строкой (потому что она не была правильно установлена ​​в атрибуте). Если бы это было действительно, это определенно сработало бы :) И я не вижу, что проблема со вторым примером, так как он возвращает ссылку – Ian

+0

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

+0

@ Я, о, я не проверял скрипку; Я взял OP за его слово, когда он указал, что значение является объектом :) – Pointy

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