Javascript 我的jqueryexist函数:它有意义吗?
最近几天我有点困惑。只要我喜欢,我就使用JQUERY选择器。。。但是我没有检查选择器是否存在,而是使用了.each函数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; }
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:不;在必须考虑之前,不应考虑性能。当然,当有一个更快速的简单替代方案时,不要写慢代码,但除非必要,否则不要进行优化。此外,我认为“最好”的代码在快速运行之前是可读和可维护的。