2017-10-14 8 views
0

jQueryを使用して子ナビゲーション要素の関係を兄弟に戻し、各兄弟にデータ属性を表す数値を追加しようとしていますその順序。nth-child番号を返し、それをデータ属性としてそのリンクに追加します

兄弟用の場合、3番目の兄弟はdata-link = "3"です。

ナビゲーションリンクの順序は、CMSのユーザーによって決定されます。

私の現在のHTML構造は次のとおりです。

<nav> 
    <a class="season-nav-link" href="#">1</a> 
    <a class="season-nav-link" href="#">2</a> 
    <a class="season-nav-link" href="#">3</a> 
    <a class="season-nav-link" href="#">4</a> 
</nav> 

そして、私のJSがある:

$(function(){ 
    var ordernum = ($("nav.season-slider-nav a").index()+1); 
    var orderlink = $("a.season-nav-link"); 
    $(orderlink).attr('data-info', ordernum); 
}); 

は、現在、各リンクでのデータ属性を持つリターンですが、一つ一つの値が「1」であります。

答えて

2

これは、最初のセレクタの結果の最初の要素のみを使用しているために発生します。

おそらく、すべての兄弟を繰り返し処理し、値のリストを入力する必要があります。次いで

第2の選択結果を反復処理し、それに応じて

擬似例埋める:インデックス「はそれぞれ」から得ることができるので、それ自体を各要素にアクセスする

$(function(){ 
    var ordernum = []; 
    $("nav.season-slider-nav a").each(function(index, element){ 
     ordernum.push(index+1); 
    }); 
    $("a.season-nav-link").each(function(index, element){ 
     $(element).attr('data-info', ordernum[index]); 
    }); 
    }); 
+0

私はこれでいくつかのエラーがあります。 this.indexは関数ではありません。 –

+0

@MichaelHeimesは答えを編集しました。これが叶うことを願う – efkin

+0

これは私にエラーを与えました:ordernum.appendは関数ではありません。 –

1

のPLS利用「はそれぞれ」を、あなたがちょうど書くことができます:

$(function(){ 
    $("nav a").each(function(index, elem) { 
    $(elem).attr('data-info', index + 1); 
    }); 
}); 
+0

あなたは男です!とてもシンプルで、うまくいきます。私はJSとjQueryで学ぶことがたくさんあります。私はちょうど私が見つけるスニペットを操作しようとするのではなく、すぐに勉強するのに十分な時間を別に置くことを望みます。ありがとう! –

+0

私は実際には奇妙な値が返ってきています。 13,14,15,16。 –

+0

あなたのnavの中には多くのアンカー(a)要素があると思います(インデックスはすべての要素に基づいています)。より具体的にするには、 'nav'または 'a'にクラス名またはrelavantセレクターを追加します:$( "nav.className a.className")。each(.... –

関連する問題