JQuery选择器中的变量

时间:2011-11-16 06:40:46

标签: javascript jquery jquery-selectors

这有效......

    var start = $('.nodes:first>span>div');
    var foo1 = $(".nodes:first>span>div>div>div>div>span>div");
    var foo2 = $(".nodes:first>span>div>div>div>div>span>div>div>div>div>span>div");
    var foo3 = $(".nodes:first>span>div>div>div>div>span>div>div>div>div>span>div>div>div>div>span>div");
    var foo4 = etc,etc...

尝试巩固这样的事情......

    var start = $('.nodes:first>span>div');
    var separator = ">div>div>div>span>div";
    var foo1 = $("start + 1*separator");
    var foo2 = $("start + 2*separator");
    var foo3 = $("start + 3*separator");
    var foo4 = etc,etc...

已经糊里糊涂了几个小时,但这种语法让我感到惊讶!有什么指针吗?谢谢!

2 个答案:

答案 0 :(得分:4)

find()方法似乎应该这样做。

var $start = $('.nodes:first>span>div');
var separator = ">div>div>div>span>div";
var $foo1 = $start.find(separator);
var $foo2 = $foo1.find(separator); // etc...

如果可能的话,我会尝试简化您的HTML,因此您不需要这么多的选择器。这种代码看起来像是一个噩梦,如果你需要回到它以后修复某些东西,那将是一个噩梦。

答案 1 :(得分:3)

选择器只是字符串,因此您只需将字符串添加到一起并将它们用作选择器。

var start = '.nodes:first>span>div';
var separator = ">div>div>div>span>div";
var foo1 = $(start + separator);
var foo2 = $(start + separator + separator);
var foo3 = $(start + separator + separator + separator);

但是,如果我们理解你想要实现的目标,那么使用较少的复杂功能可能会有更好的方法。例如,您可能应该使用不同类型的div和spans上的类,然后定位特定的类,而不考虑有多少个div的中间层。这使得您的代码变得更加简单,更不易碎,并且与确切的HTML实现相关联得更少(它仍然具有一些依赖性,但不是那么多)。

仅供参考,据我所知,你不能将字符串相乘以获得它们的多个副本,因此2*str不会为你提供一个连续两个str副本的字符串。< / p>