我的JQuery存在功能:它有意义吗?

时间:2010-12-27 14:39:40

标签: javascript jquery performance jquery-selectors

过去几天我有点困惑。我随时都会使用我的JQUERY选择器......但是我没有检查选择器是否存在,而是使用了.each函数。

  var exist = function(obj){
    var returnObject ={};
    for(var key in obj){
      if(obj[key].length){
        returnObject[key] = obj[key];
      }else {
        return false;
      }
    }
    return returnObject;
  }
  //define all your selectors that would be needed for core functionality.
  var activeSelectors = exist({
    selList : $('div.selectorone'),
    selTag : $('a#tagtwo'),
    selFloat : $(div.float) /*etc etc*/

  }) 

  if (activeSelectors) {
    console.log('all my core selectors are here!');
     /* do Stuff*/
  }

我知道这看起来有点多,特别是如果你只需要一个选择器,但我找不到更好的方法(除了每个选择器的lame if语句)。我看到人们使用

$('div#mySelector').each(function(){ /* do stuff*/});

但我不同意这很好。请注意,#mySelector(因为它是一个id)只允许一次。

我很乐意反馈。请考虑性能与尼斯编程。

如需了解更多信息,请在下面发表评论或与我联系!

1 个答案:

答案 0 :(得分:1)

如果我真的想避免使用普通的if语句,那么我可能会选择这样一个简单的函数:

var exists = function()
{
    for (var i in arguments)
    {
        if ($(arguments[i]).length == 0)
        {
            return false;
        }
    }

    return true;
}

并像这样调用它:

var list = $('div.selectorone');
var tag = $('a#tagtwo');
var float = $('div.float');
if (exists(list, tag, float))
{
    // Do some stuff.
}

或者:

if (exists('div.selectorone', 'a#tagtwo', 'div.float'))
{
    // Do some stuff.
}

我确实认为你过度设计了这个问题。您真正需要做的就是检查您所做的每个选项上的length属性(即listtagfloat变量。

此外,表演在这里完全没有问题;检查元素是否存在实际会影响您网站的用户体验的方法是什么?正如唐纳德克努特所说:

  

我们应该忘记小事   效率,约占97%   时间:过早优化是   万恶之源。