【问题标题】:consolidate repetitive if-functions in jQuery在 jQuery 中合并重复的 if 函数
【发布时间】:2013-04-28 06:54:34
【问题描述】:

将其合并为一个if 语句的正确方法是什么?

$('span').filter(function() {

    var myEl = $(this);
    var myText = myEl.text();

        if (myText.match('foo')) {
            $(myEl).addClass('foo');
        }

        if (myText.match('bar')) {
            $(myEl).addClass('bar');
        }

        if (myText.match('baz')) {
            $(myEl).addClass('baz');
        }

  });

【问题讨论】:

  • 为什么这一切都在 .filter() 中?
  • 把它变成一个函数?

标签: jquery if-statement conditional-statements


【解决方案1】:

例如,您可以这样做:

['foo', 'bar', 'baz'].forEach(function(v){
   if (myText.match(v)) myEl.addClass(v);
});

或者,如果你想兼容 IE8(没有forEach):

$.each(['foo', 'bar', 'baz'], function(_, v){
   if (myText.match(v)) myEl.addClass(v);
});

请注意,我将$(myEl) 替换为myEl,因为myEl 已经是一个jQuery 对象。

【讨论】:

  • +1。我正在使用$(['foo','bar','baz']).each(function(){}) 编写代码,我知道有更好的方法:D 看起来很棒
  • @Ejay 事实上使用$.each(而不是.each)可以让您避免导入垫片,同时与IE8兼容。
  • 感谢您的有用建议 :) 。 $.each(['foo', 'bar', 'baz']), function(_, v){ 我想你有一个额外的) 那里
【解决方案2】:

带有正则表达式的选项:

 var matches = myText.match(/foo|var|baz/g);
 if(matches) myEl.addClass(matches.join(" "));

【讨论】:

    猜你喜欢
    • 2015-09-07
    • 2018-07-22
    • 2021-11-09
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多