переменные не работают при нахождении в объекте

#jquery

#jquery

Вопрос:

Итак, я хочу установить пару переменных (наборов данных) в тег body, но когда я объединяю их в объект, имена переменных не работают.

// код

 var1 = 'data-var1'
var2 = 'data-var2'
var3 = 'data-var3'

$('body').attr({
   var1 : 1,
   var2 : 2,
   var3 : 3
});
 

// результат после

 <body var1="1" var2="2" var3="3">           
 

Комментарии:

1. Имена свойств в литерале объекта являются литералами, а не переменными.

2. С объектной нотацией JavaScript {foo: 'bar'} и {'foo': 'bar'} являются точно таким же объектом.

3. Попробуйте { "data-var1": 1, ... } . Также ознакомьтесь с jQuery .data() для работы с атрибутами данных.

Ответ №1:

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

Если вы хотите достичь этого результата, вам нужно реорганизовать свой код, чтобы:

 var var1 = "data-var1";
...

var attributes = {};
attributes[var1] = 1; // <-- You can use variables to add properties
                      // after object literal declaration!
...

$(body).attr(attributes);
 

Ответ №2:

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

 $('body').attr(var1, 1).attr(var2, 2).attr(var3, 3);