2011-11-16 2 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

Возможный дубликат [Как использовать переменные javascript в селекторах jquery] (http://stackoverflow.com/questions/5891840/how-to-use-javascript-variables-in-jquery-selectors) – Phil

+1

Я бы предпочел спросите, есть ли способ * упростить * эти селекторы/вашу структуру HTML ... – deceze

ответ

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 и span, а затем нацеливать определенные классы, не учитывая, сколько промежуточных слоев divs есть. Это делает ваш код намного, гораздо менее хрупким и гораздо менее привязан к точной реализации HTML (у него все еще есть некоторые зависимости, но не так много).

FYI, насколько я знаю, вы не можете размножать строки, чтобы получить несколько копий, поэтому 2*str не доставит вам строку с двумя последовательными копиями str.

+0

спасибо, jfriend00 ... что, если у вас есть большое количество foo, хотя (скажем 1000)? Интересно, как будет выглядеть выражение «for statement»? –

+5

Вы не хотите создавать селектора с тысячами элементов в них. Это просто неправильный способ решить проблему и, вероятно, будет выполняться очень медленно. Если вы подумываете о необходимости этого, то вы ошибаетесь в своей проблеме, и вам лучше описать фактическую проблему (включая образец 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, поэтому вам не нужно так много селекторов. Этот тип кода кажется, что это будет кошмар, чтобы понять, нужно ли вам вернуться к нему, чтобы исправить что-то позже.

Смежные вопросы