2011-11-16 192 views
2

這個工程裏面......變量jQuery選擇

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... 

一直得過且過了幾個小時,但對於這個語法脫離了我!任何指針?謝謝!

+0

可能重複的[如何在jQuery選擇器中使用JavaScript變量](http://stackoverflow.com/questions/5891840/how-to-use-javascript-variables-in-jquery-selectors) – Phil

+1

我寧願詢問是否有辦法*簡化*這些選擇器/你的HTML結構... – deceze

回答

3

選擇器只是字符串,所以您只需將字符串添加到一起並將它們用作選擇器。但是,如果我們理解了你正在努力完成的任務,那麼使用更少的併發症就可能有更好的方法。例如,你可能應該使用不同類型的div和span的類,然後針對特定的類,而不考慮有多少div的中間層。這使得你的代碼變得更加脆弱,並且更少地與HTML實現相關聯(它仍然有一些依賴關係,但是不會太多)。

僅供參考,就我所知,您不能乘以字符串以獲取它們的多個副本,因此2*str不會爲您帶來連續兩個str副本的字符串。

+0

謝謝,jfriend00 ...如果你有大量的foo(雖然說1000)?想知道'for statement'會是什麼樣子? –

+5

您不希望構造其中包含1000個項目的選擇器。這只是解決問題的錯誤方法,可能會執行得很慢。如果你正在考慮需要這些,那麼你會以錯誤的方式解決你的問題,並且最好能夠描述實際問題(包括示例HTML),並且我們會爲你提供更好的方法。 – jfriend00

+0

好吧,它不是1000,但fooX會不斷波動。看起來我們要添加一些類來創建一個可選層結構......感謝您的建議! –

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,所以你不需要這麼多的選擇器。這種代碼看起來像是一場噩夢,要了解是否需要回過頭來解決以後的問題。