使用三元运算符切换按钮文本的问题

时间:2014-09-13 23:17:50

标签: javascript jquery ternary-operator

我正在尝试使用三元运算符切换按钮文本,但它无法正常工作。

<button type="button" id="ter" >Bar</button>

$("#ter").click(function(){
   $(this).text() = 'Bar' ? 'column':'Bar';
});

如果可以通过这种方式做到,请告诉我吗?我做错了什么?谢谢。我知道有很多其他方法可以实现这一目标,但我只需要知道这种方法是否可行?感谢

3 个答案:

答案 0 :(得分:4)

你也可以试试这个:

$("#ter").click(function(){
    var newText = ($(this).text() == 'Bar') ? 'column':'Bar';
    $(this).text(newText);
});

检查当前文本是否等于带有$(this).text() == 'Bar'的'Bar'。如果是,则将变量newText设置为“column”(反之亦然)。第二行用新文本替换旧文本。

答案 1 :(得分:4)

您使用的是三元运算符错误。它是:

[statement] ? [code when true] : [code when false]

你现在基本上正在测试if('Bar'),它总会返回true。

答案 2 :(得分:3)

你做错了,你可以改用这种方法:

$("#ter").click(function(){
   $(this).text(function (i, t) {
       return t === 'Bar' ? 'column':'Bar';
   });
});

它没有工作的原因是:

  1. 您尝试结果分配给$(this).text()(使用=)而不是比较==或{{ 1}})和
  2. 不返回任何内容以更新文本
  3. 重要的是要注意,使用jQuery时,===方法(以及大多数其他方法)在没有参数的情况下调用时是 getter (它获取当前值),但是要将它用作 setter ,您必须直接(text())或使用匿名函数($(this).text('foo'))传递参数。调用getter并比较检索到的值(或尝试分配它)并不能作为setter。

    在jQuery方法可用的匿名函数中,第一个参数(此处称为$(this).text(function(){ return 'foo'; }),但名称无关紧要,它始终是第一个参数)是当前&#39;的索引。 i&#39; jQuery返回的集合中的对象,第二个参数(此处称为$(this),但名称无关紧要)表示方法找到的当前(预操作)值。

    参考文献: