1

特定のクラスのすべての要素を取得し、それらに連続した ID を追加して、それらを配列に入れたいと思います。これが私がこれまでに持っているものです。

(function(){
    for(var i = 1; i<$(".slideshow").length; i++){
        $(".slideshow").attr("id", "slides-" + i + "")
    }
});

何が起こるかというと、すべての .slideshow クラスの id を同時に設定し、それらをすべて最後と同じにします (実際には最後から 2 番目、バグは後で解決する必要があります)。

個々のクラスの ID を設定するにはどうすればよいですか? 各ループを実行する場合:

$(".slideshow").each(function(){
    for(var i = 1; i<$(".slideshow").length; i++){
        $(".slideshow").attr("id", "slides-" + i + "")
    }
});

「これ」はどうやって使うのでしょうか?

4

2 に答える 2

2

.each()に渡されるコールバック関数は 2 つのパラメーターをとるので、1 つ目はコレクション内の要素のインデックス、2 つ目は要素自体です。次のように記述できます。

$(".slideshow").each(function(i, el){
    el.id = 'slides-' + i;
});

id属性は一般的にサポートされているため、ここで構成を使用する必要はありません$(el).attr('id', ...)

ここでは、スライドのインデックスは 0 から始まることに注意してください。元のコード (1 ベース) のようにしたい場合は、次のようにします。

    el.id = 'slides-' + (i + 1);

i + 1これらは連結ではなく追加する必要があるため、部分式を囲む括弧は重要です。

括弧がない場合、式は として処理され('slides' + i) + 1ます。最初の+記号は String と Number の間に配置されるため、連結演算子として扱われ、String返されます。したがって、次+も連結操作になります。たとえば、 が 9 の場合は'slides-91'、(期待されたものではなく) が表示されます。'slides-10'i

結果として配列が必要な場合は、jQuery オブジェクトの.toArray()メソッドを使用します。

var slideShowNodes = $(".slideshow").each(function(i, el){
    el.id = 'slides-' + i;
}).toArray();
于 2013-07-14T17:36:19.620 に答える
1

ID をインクリメントし、すべての要素を配列のような nodeList に入れますか?

var arr = $(".slideshow").prop('id',function(i) {
    return "slides-" + i;
}).get();

フィドル

于 2013-07-14T17:36:31.933 に答える