заменить функцию jquery на var

Я пытаюсь заменить измененную функцию jquery на переменную, но она не работает (синтаксическая ошибка)

Попытка что-то вроде этого:

var foo = 'next()';
$(this).+foo+.show();

Можно ли это как-то осознать? foo — это переменная, которая меняется на «prev()» в другом условии if


person ggzone    schedule 02.02.2012    source источник
comment
Только с eval; не. Вместо этого используйте условные выражения.   -  person Lightness Races in Orbit    schedule 02.02.2012
comment
Нет, не только с eval. Кроме того, если вы собираетесь упомянуть условные выражения, вы должны дать ggzone небольшой совет о том, где о них можно узнать :)   -  person Kato    schedule 02.02.2012


Ответы (3)


Сделай это так:

var foo = 'next';
$(this)[foo]().show();

Установив для переменной только имя метода, вы можете использовать нотацию [] и использовать переменную для получения свойства next объекта jQuery.

Это эквивалентно...

$(this)['next']().show();

что эквивалентно...

$(this).next().show();
person Community    schedule 02.02.2012
comment
таким образом вы не вызываете foo - person André Alçada Padez; 02.02.2012
comment
Просто чтобы развить это, в JavaScript foo.bar и foo['bar'] означают одно и то же, а foo['bar'] имеет то преимущество, что вы можете использовать переменную для ключа. - person cdmckay; 02.02.2012
comment
Вам понадобится [foo]() для выполнения метода. - person Sam Greenhalgh; 02.02.2012
comment
@zapthedingbat: Спасибо, да, я сначала забыл (), но добавил их обратно при обновлении. - person ; 02.02.2012

попробуй это:

var foo = 'next';
$(this)[foo]().show();
person André Alçada Padez    schedule 02.02.2012

У вас есть два варианта, которые я вижу:

var foo = next; // use the OBJECT here, not a string
$(this).foo().show();

OR

var foo = false;
if (foo)
  $(this).next().show()
else
  $(this).prev().show();
person josh.trow    schedule 02.02.2012