Ответ 1
Try:
something.val(something.val() == 'string1' ? 'string2' : 'string1');
Он называется тернарным выражением.
Я хочу сделать что-то вроде
if(something.val() == 'string1')
{
something.val('string2');
}
else if(something.val() == 'string2')
{
something.val('string1')
}
Но в одной строке кода. Я не могу вспомнить, как это делается, но оно включает вопросительные знаки и двоеточия...
Try:
something.val(something.val() == 'string1' ? 'string2' : 'string1');
Он называется тернарным выражением.
Посмотрите ma, нет тройного оператора!
Следующее работает, поскольку логические выражения Javascript коротких замыканий.
Если something == string1
, тогда оцените string2
- поскольку string2
является истинным значением, а следующее выражение включает операцию OR, нет необходимости продолжать. Остановить и вернуть string2
.
Если something !== string1
, то он пропустит следующий операнд, потому что, если он является ложным, нет смысла оценивать следующий операнд (с AND). Он "прыгнет" в операцию ИЛИ и вернет string1
.
function toggleString(something, string1, string2) {
return something == string1 && string2 || string1;
}
something.val(toggleString(something.val(), "string1", "string2"));
Если вы хотите выполнить задание:
function toggleValue(something, string1, string2) {
something.val(something.val() == string1 && string2 || string1);
}
toggleValue(something, "string1", "string2"); // something is a jQuery collection
В конце концов, в конечном итоге, я использовал бы тернарный оператор, потому что это решение может быть непонятным для других программистов. Если вы пришли из Java или других языков, вы можете ожидать, что функция вернет логическое значение из-за всех логических операторов.
Как насчет использования кода @Daniel вместе с функцией jquery:
$.fn.toggleVal = function (str1, str2) {
return this.val(this.val() == str1 && str2 || str1);
};
$("input").toggleVal('string 1', 'string 2');
Другой способ сделать это с помощью свойств объекта:
{ 'string1': 'string2', 'string2': 'string1' }[value]
Как и в вопросе:
something.val(
{ 'string1': 'string2', 'string2': 'string1' }[something.val()]
)
Вы хотите использовать тернарный оператор:
something.val((something.val() == 'string1') ? 'string2' : 'string1');
Как и в jQuery 1.4, вы можете сделать это:
something.val(function(index, val) {
return val == 'string1' ? 'string2' : 'string1';
});
something.val( something.val() == 'string1'? 'string2' : 'string1' );
или для уточнения
val astring = something.val() == 'string1'? 'string2' : 'string1';
something.val( astring );
something.val(something.val() == 'string1' ? 'string2' : 'string1');