2011-10-05 51 views
2

我正在处理我的Stretchbox Plugin并试图优化和缩短代码。 我已经使用jquery数据方法将数据附加到某些div。 例如:查找jquery中的数据

$('#thumbs div:last-child').data('active', true) 

它将某个div设置为激活状态。 如果我知道要找到这个div,我要检查每个.thumb类 ,以便找到它:

$('.thumb').each(function() { 
    if($(this).data('active')){ 
     //Do Stuff 
    } 
} 

这工作得很好,但我敢肯定应该有一个更简单的方法,因为检查每个单独的.thumb div(10-30之内)也需要一些性能。

回答

0

据我所知,没有其他方法可以做到这一点。但是,您可以创建一个新的jQuery选择器。我打算给它一个镜头,但它看起来像someone has already thought of it(向下滚动到“查询元素数据”)。

它可以让你做这样的事情:

$(':data(active)'); //Selects all elements with "active" data 

它可能不会是快,但它可能使你的代码更简洁!

+0

我相信[this](http://stackoverflow.com/questions/2891452/jquery-data-selector/2895933#2895933)是一个更好,更广泛的选择器。 :) – Shef

+0

好的发现!我刚刚链接到我发现的第一个,并没有再看! –

1
$(".thumb[data-active='true']"); 
+0

数据被设置与'$。数据()'[将无法使用属性选择器(http://jsfiddle.net/Shef/unALg/)。 – Shef

+0

我其实并不知道你不能选择用$ .data设置的属性。谢谢你指出,我会留下答案,让其他人至少知道什么是错的(upvote也是没有意义的)。 –

0

我错过了什么吗?只要将它保存在一个变量:

jQuery(function($){ 
    var activeDiv = []; 

    $('#selector').click(function(){ 
    activeDiv = $('#thumbs div:last-child') 
    ... 
    }); 

    $('#executor').click(function() { 
    activeDiv.each(function() { 
     ... 
    }); 
    } 
}); 
+0

这当然工作,但正如我已经提到的,我打算使用数据方法,因为我也将它用于其他功能,因此正在寻找更快的方法。不管怎么说,还是要谢谢你! – Janik

+0

@Janik:恐怕这有点像说你喜欢用锤子来驱动螺丝。数据方法用于将数据附加到DOM元素以供稍后由插件检索。它不能加速DOM搜索。 –

+0

好吧,认为这可能是另一个好办法。感谢提示。 – Janik