【问题标题】:jQuery Conditional Statement (Ternary) for text()用于 text() 的 jQuery 条件语句(三元)
【发布时间】:2016-07-17 07:14:14
【问题描述】:

如果元素 (promo-footer) 不是空字符串 '',我正在尝试将元素 (promo-footer) 的文本值设置为变量 (footerVar) 的内容。

$('.promo-footer').text(footerVar == '' ? 'no' : footerVar);

这可行,并且仅在存在时显示页脚文本,并且变量是空字符串''然后显示“否”...

我的问题是 - 为什么会这样?我认为如果等式计算结果为true,问号之后的第一件事会发生?

x = (1 < 2) ? true : false;

它正在运行:https://jsfiddle.net/xfzgaLq6/

【问题讨论】:

  • 我很困惑。你知道它是如何工作的,你描述了它是如何工作的,然后你问它为什么工作? (提示:它适用于您之前描述的所有原因。)
  • 如果 footerVar 是 '',那么第一部分的计算结果为真,结果就像你描述的那样“不”
  • @Jamiec 如果我知道为什么,那么我就不会问“为什么”这个问题。现在我的问题已经得到解答,我明白了。

标签: javascript jquery ternary-operator


【解决方案1】:

它按应有的方式工作。

var promotionObj = {};
promotionObj.footer_text = "foot test";

// This works, says "foot test".  Why??
$('.promo-footer').text(promotionObj.footer_text == '' ? 'no' : promotionObj.footer_text);

// This says "no":
$('.promo-footer').text(promotionObj.footer_text == '' ? promotionObj.footer_text : 'no');

现在考虑上面的代码,它来自您发布的小提琴。 第一个说“foo test”,因为promotionObj.footer_text 不是空字符串。代码的第二部分说“否”,因为您交换了表达式的排列,其中变量的值:promotionObj.footer_text 只有在它为空且在本例中不为空时才会用作页脚文本,因此将显示“否”。

考虑一下。

var arg = 5;
var result = arg > 10 ? arg : 0;  // result contains 0
var result = arg > 10 ? 0 : arg // result contains 5 which is the value of arg

我希望解释清楚。

【讨论】:

  • 感谢您的解释。这是有道理的。
【解决方案2】:

footerVar 为空字符串时,此footerVar == '' 为真。但在你的情况下,它是一个非空字符串。所以它的计算结果为false,并且表达式属于 false 部分被返回。即]在:之后

以下示例将澄清您对三元运算符用法的疑问。

var x = (true) ? 10 : 20;
console.log(x); //10;

var x = (false) ? 10 : 20;
console.log(x); //20;

这是ternary operator 的语法,

(condition) 
  ? expression has to be returned when condition evaluates to true
  : expression has to be returned when condition evaluates to false

【讨论】:

  • 啊我现在明白了。这是有道理的。谢谢。
【解决方案3】:

没错,因为如果 footerVar === ' ',则条件为真。(页脚为空)并返回第一条语句。如果 footerVar 不为空,则条件为假并返回第二条语句。

【讨论】:

    猜你喜欢
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2017-10-20
    • 2015-04-22
    • 1970-01-01
    相关资源
    最近更新 更多