web-dev-qa-db-ja.com

親とその親の最初の子を見つける

要素の親と最初の親の子を見つけようとしています。コードは次のようになります。

        <ul class="lowerMenu">
            <li><a href="" class="selected">Welcome</a></li>
            <li><a href="">Logo</a></li>
            <li><a href="">Websites</a></li>
            <li><a href="">Stationery</a></li>
            <li><a href="">Illustration</a></li>
            <li><a href="">Full Pack</a></li>
        </ul>

function setIntervalAndExecute() {
    changeImages();
    setTimeout(function(){
        showImages(imagesArray);
    },500);
    var intervalot = window.setInterval(function(){
        changeImages();
        var selected = $('.selected');
        if (!selected.parent().is(':last-child')) {
            $('.selected').parent().next().children().addClass('selected');
            selected.removeClass('selected');
        } else {
            $('.selected').parent().parent().children(':first-child').addClass('selected');
            selected.removeClass('selected'); // nesho ne mi rabotit ovdeki
        }
        window.setTimeout(function(){
            showImages(imagesArray);
        },500);
    },10000);
    return intervalot;
}
var intervalot = setIntervalAndExecute();

私はそれが少し複雑であることを知っていますが、私はjqueryに慣れていないので、私がやろうとしていることは、「選択された」クラスが最後の要素に到達してから、それを削除して最初の要素に設定した後です。私はこれを試しましたが、うまくいかないようです

$('.selected').parent().parent().children(':first-child').addClass('selected');

そして、最後の要素に到達すると、間隔は2回実行されて停止します。これは私が取り組んでいるサイトです:

http://nikodola.com/testsite

11
pashata

2つのレベルを上げて次の子を見つけたら、1つのレベルだけ下がっています。<li>ではなく<a>selectedクラスを設定しています。その下..あなたは別のレベルを下る必要があります。だからそれはする必要があります:

$('.selected').parent().parent().children(':first-child').children().addClass('selected');

そこに着く別の方法は:

$('.selected').parent().siblings(':first-child').children().addClass('selected');
22
Barmar
$('.selected').parent().siblings(':first-child').children().addClass('selected');

FIDDLE DEMO

4
RONE