2013-02-12 2 views
2

У меня была эта работа изначально, но она запускалась через валидатор W3C, исправлялась ошибки и теперь она не работает.jQuery slideToggle nested ul li

У меня настроить jsfiddle

По сути, это куча вложенных уль-х используется как выпадающие, с заголовками взял, что при индивидуальном нажатии раскрыть информацию, содержащуюся в гнездовой ул.

Но так как вложенные ульки внутри ли не работают, попробовали селектора, такие как дети/братья/сестры/рядом - все это безрезультатно. Это не значит, что они не сработают, просто я не понимаю достаточно, чтобы заставить их работать (ясно!).

Этот код делает все списки слайдов одновременно, однако я хочу управлять ими индивидуально.

$(function(){ 
    $("ul.featureListings").hide(); 

    $(".featuresHeading").click(function() { 
    $('ul.featureListings').slideToggle(300); 
    return false; 
    }); 
}); 

Я уверен, используя что-то вроде:

$(this).next('.featureListings').slideToggle(300); 

должен работать, но я не могу за жизнь мне понять это правильно. Я предполагаю, что это связано с тем, что он вложен, и я не нацелен на него должным образом, но мои знания ограничены, так как это крайний срок.

Как можно настроить таргетинг на соответствующую улицу? Интересно, может ли кто-нибудь помочь пролить некоторый свет и помочь мне понять, почему это не работает, пожалуйста?

ответ

3

Попробуйте это:

$(function(){ 
    $("ul.featureListings").hide(); 

    $(".featuresHeading").click(function() { 
    $(this).next("li").children('ul.featureListings').slideToggle(300); 
    return false; 
    }); 
}); 

Вам просто нужно пройти через DOM в правильном направлении .. Вы хотите, чтобы перейти на следующий Li (.next («Ли»)), то в одном из своих детей (.children ('ul.featureListings')) и запускать slideToggle.

+0

отлично, это работает шарм, большое спасибо. Таким образом, этот селектор в основном читает: посмотрите на следующее дочерние li и если это ul с признаками класса, то выполните slideToggle. Отлично, большое спасибо – Salv

+0

Вы делаете это так просто. Требуется больше образования! Спасибо, что помогли мне, очень высоко оценили. – Salv

0

Использование .next()

$(this).next().find('ul.featureListings').slideToggle(300); 

Демо здесь http://jsfiddle.net/heE6J/4/

+0

Это тоже работает, есть ли какая-либо польза от использования одного над другим? Или это просто еще один способ обмануть кошку? – Salv

+0

для этой ситуации это то же самое, но если бы элемент был дальше, то поиск был бы лучше, потому что тогда вам не нужно делать children(). Children() – Anton

+0

А я вижу, поэтому find будет развернуть несколько уровней элементов chid. Очень интересно, спасибо, что нашли время, чтобы ответить на этот вопрос, еще раз, очень ценим. – Salv

0

$(function(){ 
    $("ul.featureListings").hide(); 

    $(".featuresHeading").click(function() { 
    $('ul.featureListings', $(this).next()).slideToggle(300); 
    return false; 
    }); 
}); 
+0

Очевидно, мне нужно больше узнать о javascript и его селекторах. Спасибо за вашу помощь, это тоже работает. – Salv

1

Я сделал jsfiddle все, что я понял. думаю. Вы хотите, чтобы slideToggle со следующим и предыдущим закрытием по открытию тока. Я также сделал изменение на странице html.

$("ul.featureListings").hide(); 

    $(".featuresHeading").click(function() { 
     $('ul.featureListings').not($(this).children('ul.featureListings')).slideUp(); 
    $(this).children('ul.featureListings').slideToggle(300); 
    return false; 
    });