Javascript 我的jqueryexist函数:它有意义吗?

Javascript 我的jqueryexist函数:它有意义吗?,javascript,jquery,performance,jquery-selectors,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; }

最近几天我有点困惑。只要我喜欢,我就使用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*/
  }
我知道这看起来有点过分,特别是当您只需要一个选择器时,但我想不出更好的方法(除了在每个选择器上使用一个蹩脚的if语句)。我看到有人用

$('div#mySelector')。每个(函数(){/*dostuff*/})

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

我希望得到反馈。请考虑性能和尼斯编程。
欲了解更多信息,请在下面发表评论或与我联系

如果我真的想避免只使用一个普通的
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.
}
然后像这样调用它:

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.
}
或:

不过,我确实认为你在设计这个问题。您真正需要做的就是检查您所做的每个选择的
length
属性(即
列表
标记
浮动
变量)

此外,性能在这里完全不是问题;检查元素是否存在的方法实际上会影响站点的用户体验吗?正如Donald Knuth所说:

我们应该忘记小问题 效率,比如说大约97%的 时间:过早优化是关键 万恶之源


如果我真的想避免只使用一个普通的
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.
}
然后像这样调用它:

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.
}
或:

不过,我确实认为你在设计这个问题。您真正需要做的就是检查您所做的每个选择的
length
属性(即
列表
标记
浮动
变量)

此外,性能在这里完全不是问题;检查元素是否存在的方法实际上会影响站点的用户体验吗?正如Donald Knuth所说:

我们应该忘记小问题 效率,比如说大约97%的 时间:过早优化是关键 万恶之源


不确定您想做什么,但
$('div.selectorone')。length
在“空”时将返回0,非常简单
,如果您想要的是
语句。@Shadow Wizard感谢您的回复。if语句也可以工作,但是代码会在选择器不存在后停止,因此它会在代码的早期停止。另一件事是if($('sel').length){$('sel'.css())}我调用DOM两次,我可以使用var,但我喜欢3行代码(性能vs漂亮),为什么if语句会很蹩脚?大多数jq插件都是基于each的,所以一个each-of-a选择器如果为空,则不会执行任何操作。我看不出这样做有什么意义。实际上,这个toppic可以帮助你:不确定你想做什么,但是
$('div.selectorone')。当长度为“空”时,它将返回0,非常简单
,如果
语句可能是你想要的。@Shadow Wizard谢谢你的回复。if语句也可以工作,但是代码会在选择器不存在后停止,因此它会在代码的早期停止。另一件事是if($('sel').length){$('sel'.css())}我调用DOM两次,我可以使用var,但我喜欢3行代码(性能vs漂亮),为什么if语句会很蹩脚?大多数jq插件都是基于each的,所以一个each-of-a选择器如果为空,则不会执行任何操作。我看不出这样做有什么意义。事实上,这个toppic可以帮助你:vousden。。也谢谢你的回复。我不是真的在回避if语句,一点也不是。我确实称之为跛脚,因为如果你使用“if”语句,你会在每个选择器上一遍又一遍地使用它。如果(选择长度){//go}。。我确实希望避免在dom中调用选择器两次。所以我很喜欢你的函数(它稍微小一点)调用nr1。但基本上是相同的功能。。我同意,我可以删除1个变量。性能不是问题,我知道,但我们必须强迫自己制作最好的代码,你不同意吗?@Mimo:不;在必须考虑之前,不应考虑性能。当然,当有一个更快速的简单替代方案时,不要写慢代码,但除非必要,否则不要进行优化。此外,我认为“最好”的代码在快速运行之前是可读和可维护的。。也谢谢你的回复。我不是真的在回避if语句,一点也不是。我确实称之为跛脚,因为如果你使用“if”语句,你会在每个选择器上一遍又一遍地使用它。如果(选择长度){//go}。。我确实希望避免在dom中调用选择器两次。所以我很喜欢你的函数(它稍微小一点)调用nr1。但基本上是相同的功能。。我同意,我可以删除1个变量。性能不是问题,我知道,但我们必须强迫自己制作最好的代码,你不同意吗?@Mimo:不;在必须考虑之前,不应考虑性能。当然,当有一个更快速的简单替代方案时,不要写慢代码,但除非必要,否则不要进行优化。此外,我认为“最好”的代码在快速运行之前是可读和可维护的。