【问题标题】:Trouble changing attribute with shorthand if使用速记更改属性时遇到问题 if
【发布时间】:2013-05-23 23:54:21
【问题描述】:

我只是想知道是否可以得到一些指点。

如果根据 div 是否切换来更改文本,我正在使用速记。

这就是我的文本转换器:

$(this).text($(this).text() == 'Email Me' ? 'Close Form' : 'Email Me');

我想按照这些思路更改锚的标题属性。我已经使用以下方法进行了尝试:

$(this).text($(this).attr('title', == 'Email Me' ? 'Close Form' : 'Email Me')); //This throws up syntax errors in firebug because of where the == is placed

我也试过如下:

$(this).text($(this).attr('title') == 'Email Me' ? 'Close Form' : 'Email Me'); //This doesn't change the attribute at all.

我想我可能只是很愚蠢,但我无法弄清楚这一点。我用谷歌搜索了它,但似乎找不到明确的答案。

只是想知道你是否对我可能出错的地方有任何建议。

提前致谢

【问题讨论】:

  • 只是想知道是否有其他人能够检查这一点并找到解决方案。问题(来自下面的对话)是三元运算符默认为 false - 即使它在 js fiddle 中工作得很好。我已经用一个长手 if else 语句尝试了它,它仍然默认为 false。我尝试将 123 放在 a 的属性和比较中,但没有任何运气

标签: jquery shorthand-if


【解决方案1】:

您不应该改用attr 吗?

$(this).attr("title", $(this).attr('title') == 'Email Me' ? 'Close Form' : 'Email Me');

代替:

$(this).text($(this).attr('title') == 'Email Me' ? 'Close Form' : 'Email Me'); //This doesn't change the attribute at all.

【讨论】:

  • 我已经用 attr 试过了,它似乎不想工作。当我第一次尝试它时,我认为这只是将文本更改为 attr 但它不想玩球的情况。我也没有在 firebug 中收到任何错误
【解决方案2】:

如果要更改属性,请更改属性,而不是文本:

$(this).attr('title', $(this).attr('title') == 'Email Me' ? 'Close Form' : 'Email Me');

请注意,title 是一个反射属性,因此您可以在不使用 jQuery 的情况下更有效地执行此操作:

this.title = this.title == 'Email Me' ? 'Close Form' : 'Email Me';

但是你必须做成千上万次才能使效率变得重要。


condition ? value : otherValue 被称为“三元”运算符。它通常被称为“三元”运算符,但“三元”只是意味着它有三个操作数(一个“二元”运算符[如1 + 1 中的+] 有两个,一个“一元”运算符[如--n] 中只有一个),所以从技术上讲,它是“a”三元运算符。我只是大多数类 C 语言中唯一的一种......

【讨论】:

  • 我已经尝试了这两种方法,但似乎都没有奏效。 this.title 的后一个似乎破坏了 jquery 并且函数的其余部分没有运行。我已经尝试过前者,但它并没有改变它,并且使用 firebug 也没有显示任何变化。我一定是错过了一些如此愚蠢的事情
  • @Chris:奇怪。为我工作:jsbin.com/ocevoj/1(来源:jsbin.com/ocevoj/1/edit)和jsbin.com/ocevoj/2(来源:jsbin.com/ocevoj/2/edit)。当然,您必须确保 this 指的是您要更改的 div(例如,在 jQuery 事件处理程序中)。
  • @Chris,发布你的整个代码,或者创建一个小提琴,因为这个解决方案应该可以工作,所以它会更容易帮助你。
  • 嗨,这是小提琴 [link]jsfiddle.net/wilcochris/nDMf8/[/link] 它在小提琴中工作得很好。我尝试在我的页面上使用它,但它不起作用。只有当我在标题 attr 中有一个单词时它才会起作用。我无法理解它
  • @Chris:恕我直言,工作小提琴没有多大意义。 :-) 唯一想到的是,您要比较的标题中的文本与您要比较的标题中的文本 完全相同。 (例如,您是否使用制表符而不是空格?)
【解决方案3】:

事实证明,这是我正在运行的插件的问题。我有提示插件来提供精美的工具提示。

一旦我停止在 a 标签上的 title 属性中使用它,切换就完美地工作了。我现在必须弄清楚它为什么这样做。

感谢大家的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    相关资源
    最近更新 更多