【问题标题】:Ternary operation of an incomplete statement不完整语句的三元运算
【发布时间】:2016-10-19 23:46:58
【问题描述】:

语法问题;是否可以执行以下操作:

var home_page_feed;
var videos = $get_utoob_videos;
for each(video in videos) {
    if(video.special_interests)
        $(home_page_feed).prepend(video.thumbnail);
    else
        $(home_page_feed).append(video.censornail);
}

...但是在单个三元运算中,像这样:

for each(video in videos)
    $(home_page_feed) .CHAIN. 
        video.special_interests ? 
             // true - chain this
            .prepend(video.thumbnail) :
             // false - chain this instead
            .append(video.censornail);

我把 .CHAIN. 作为占位符。是否有一个 jQuery 函数可以通过三元运算分配链接到不完整的语句?我喜欢在语句和操作中使用三元,因为它很简单,因此我们将不胜感激。

回答 感谢@Barmar,他建议使用 eval() 函数,我能够将它包装在三元运算中。

$.each(videos, function(i, video) {
    eval ("$(home_page_feed)" +
        ((video.special_interest) ? 
            ".prepend(video.thumbnail)" :
            ".append(video.censornail)"
        )
    );
});

【问题讨论】:

  • 这些 sn-ps 都不是有效的 javascript 开头 - 即使没有这个 .CHAIN。神秘物品 - 但不,从我能辨别出你的代码的一点点来看,你不能这样做
  • 第一个在右全局下有效;但是,关于这个问题,您不需要运行它。
  • for each - 这在某种类型的 javascript 中有效吗?我一定是中风了,因为我根本记不起这个语法!!
  • @JaromandaX 哈哈
  • 感谢@squint - 我真的很关心我的健康:p

标签: javascript jquery chaining ternary


【解决方案1】:

你可以把三元放在.append()的参数中

$.each(videos, function(i, video) {
    $(home_page_feed).append(video.special_interests ? video.thumbnail : video.censornail);
});

或者你可以把它放在索引中:

$.each(videos, function(i, video) {
    $(home_page_feed).append(video[video.special_interests ? "thumbnail" : "censornail"]);
});

注意最新版本中的引号。

您可以使用 eval() 编写代码

$.each(videos, function(i, video) {
    var chain = video.special_interest ? 
        ".prepend(video.thumbnail)" :
        ".prepend(video.censornail)";
    eval ("$(home_page_feed)" + chain);
});

【讨论】:

  • 是的,谢谢,我知道;很棒的语法。不是我要的,但感谢你的酷把戏。我在想我想做的事情是不可能的?
  • 那我不明白你要什么。你的最后一个循环没有意义,因为你只是在每次循环中覆盖chain。你的意思是chain +=,所以它会连接到它?
  • 你不能像那样创建 Javascript 的 sn-ps,然后通过连接来执行它们。
  • 你可以使用eval() 做你想做的事,但这太恶心了。但我会将其添加到我的答案中。
  • 例如在 PHP 中你可以写 $object->$methodName() 来调用变量中命名的方法。
【解决方案2】:

这应该会有所帮助

var home_page_feed;
var videos = $get_utoob_videos;
for each(video in videos) {
  (video.special_interests)?$(home_page_feed).prepend(video.thumbnail): $(home_page_feed).append(video.censornail);


}

希望对你有帮助

【讨论】:

  • 谢谢,但我希望链接到一个不完整的语句作为操作。你的不是一个操作,有 2 个完整的语句;这就是我想简化语法的原因,这样你就不必写两次 $(home_page_feed) 了。
猜你喜欢
  • 1970-01-01
  • 2012-02-08
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 2016-06-28
  • 2017-10-20
  • 1970-01-01
相关资源
最近更新 更多