2

リスト内の次の一致する要素を取得しようとしています。

var newScrollX = $('#projectImages li').next(".instOf"+myNo);

上記は機能しますが、リスト内の以前のインスタンスに戻りたくないので;

var newScrollX = $('#projectImages li').next(".instOf"+myNo+":gt("+cIm+")");

しかし、それはうまくいきません。何か案は?

リストはこのようなものです;

<li id="im1" class="projIm instOf1" style="opacity: 1; left: 202px;"></li>
<li id="im2" class="projIm instOf2" style="opacity: 1; left: 1413px;"></li>
<li id="im3" class="projIm instOf3" style="opacity: 1; left: 2624px;"></li>
<li id="im4" class="projIm instOf1" style="opacity: 1; left: 3620px;"></li>
<li id="im5" class="projIm instOf2" style="opacity: 1; left: 4831px;"></li>
<li id="im6" class="projIm instOf3" style="opacity: 1; left: 6042px;"></li>
<li id="im7" class="projIm instOf1" style="opacity: 1; left: 7038px;"></li>
<li id="im8" class="projIm instOf2" style="opacity: 1; left: 8249px;"></li>
<li id="im9" class="projIm **instOf3**" style="opacity: 1; left: 9460px;"></li>
<li id="im10" class="projIm instOf1" style="opacity: 1; left: 10456px;"></li>
<li id="im11" class="projIm instOf2" style="opacity: 1; left: 11667px;"></li>
<li id="im12" class="projIm instOf3" style="opacity: 1; left: 12878px;"></li>

したがって、#im7 を使用していて、instOf3 の次のインスタンスが必要な場合は、#im9 に移動する必要があります。

だから私はgt(7)を追加した場合、それは前進するだけだと思っていましたが、エラーが発生しました...

どうもありがとう!D.

4

2 に答える 2

2

インデックスでリスト要素を参照したいようです...質問はあまり理解しにくいですが。

:eqindex()を見てください。

私はいくつかの数学とこれらの悪い男の子があなたが行く必要がある場所にあなたを連れて行くかもしれないと感じています.

于 2009-12-11T14:41:16.273 に答える
1

これを試してください...このペーストビンにデモも投稿しました。

var newScrollX = $(this).nextAll(".instOf"+myNo+":first");

$(this)それが現在選択されているオブジェクトであると仮定します。


アップデート:

自由を取ってコードをクリーンアップすることを許してください。私のOCDは私にそうせざるを得ませんでした! 以下にいくつかの注意事項を示します。

  • 複数の関数を連鎖させ、必要に応じて.end()( link ) を使用しました。
  • eval()コードで使用する必要はありません。
  • .prevAll().lengthID には現在の長さが含まれているため、コードの一部を置き換えました。

    .substring(2,newScrollX.length); // im4 -> 4
    
  • スクロール更新を、リンクと画像クリックの両方で使用する 1 つの関数にまとめました。

  • すべてのコメントと未使用の変数を削除しました。あなたが取り組んでいた他の何かを削除した場合は申し訳ありません。
  • 現在の画像表示が変更されました。現在のIDとモジュラス演算子を使用して画像番号を計算しました-コーディングが少なくなります:P

    cImDis = ((cIm-1) % totIm) + 1;
    

脚本

    var edge, marginLeft;
    var cIm = 1; // make this global

$(document).ready(function(){
    edge = $("#navDiv").offset();
    marginLeft = edge.left;
    $('#projectImages')
        .css("background-position",marginLeft+"px 10px")
        .children("li").each(function(i){
            $(this).css('opacity', 0.0);
        })

    $("div.personInfo")
        .children(".toShow").hide().end()
        .each(function(i){
            $(this).click(function(){
                var tgt = $("#xxx"+(i+1));
                if($("#xxx"+(i+1)).is(":visible")){
                    $("#xxx"+(i+1)).slideUp(150);
                } else {
                    $("#xxx"+(i+1)).slideDown(200);
                }
            });
        });
})

$(window).resize(function(){
    edge = $("#navDiv").offset();
    marginLeft = edge.left;
})

$(window).load(function(){
    cIm =1;
    var cImDis =1;
    var totIm = parseInt($("#totIm").text(),10);
    var totX = 0;
    edge = $("#navDiv").offset();
    marginLeft = edge.left;
    var imageIcons="";

    $('#projectImages')
        .css("background-position","-1000px 20px")
        .children("li:eq(0)").animate({ 
            opacity: 1.0
        }, 400 ).end()
        .children("li").each(function(i){

            if(i>0){
                totX = 0;
                $(this).parent("ul").children("li:lt("+i+")").each(function(){
                    totX += $(this).width();
                });
                $(this).css("left",(totX+marginLeft)+"px");
                totX += $(this).width();
                $(this).animate({
                    opacity: 1.0
                }, 400 );
            } else {
                $(this).css("left",marginLeft+"px");
            }
            imageIcons +="<a class=\"scrollTo\" href=\"#\" rel='im"+(i+1)+"'> • </a>";
        });

        $("#imageIcons").html(imageIcons);
        $("#imageIcons a:eq(0)").addClass("activeImage");
        $("h3.phil:eq(0)").children('a').addClass("activeText");

        $("a.scrollToText").click(function(){
            cImDis = $(this).attr("rel");
            var newScrollX = $('#im'+cIm).nextAll(".instOf" + cImDis + ":first").attr('id');
            cIm = parseInt(newScrollX.substring(2,newScrollX.length),10);
            nextIm();
            return false;
        })

        $("#projectImages li img").click(function(){
            cIm++;
            cImDis = ((cIm-1) % totIm) + 1; // find remainder
            nextIm();
            return false;
        })

        function nextIm(){
            var newScrollX = $("#im"+cIm);
            var posX = parseInt(newScrollX.css("left"),10);
            $('#projectImages').scrollTo((posX-marginLeft)+"px", 350, updateDisplay());
            $("#feedback").prepend("<li>(cim:"+cIm+") (cimDis:"+cImDis+")</li>");
        }

        function updateDisplay(){
            $("#cIm").text(cImDis);
            $(".activeText").each(function(){
                $(this).removeClass("activeText");
            });
            $("h3.phil:eq("+(cImDis-1)+")").children('a').addClass("activeText");
        }
});
于 2009-12-11T15:42:18.263 に答える