0

jqueryを使用してdivをリンクに変換することに取り組んでいます。リンクを機能させるには、各章の story_id と chapter_id の両方を取得する必要がありますが、その場合、最初の chapter_id のみを取得するため、すべてのリンクが同じになります。私はシーンを作っていますか?

ストーリーブロックの場合、私のjqueryは次のようになります。

$('.storyInnerBlock').click(function(){
  var story_id = $('.story_id').val();
  var chapter_id = $('.chapter_id').val();
  $ (location). attr ('href', 'http://www.writeyourfiction.com/index.php/story/readStory/'+story_id+'/'+chapter_id);
});

何が起こっているのかを示すためにフィドルを設定しました。

http://jsfiddle.net/zazvorniki/vwnCb/6/

どんな助けでも大歓迎です!:)

4

2 に答える 2

1

私はお勧めします:

$('.storyInnerBlock').click(function () {
    var context = $(this).closest('.storyInnerBlock'),
        story_id = context.find('.story_id').val(),
        chapter_id = context.find('.chapter_id').val();

    alert('story ' + story_id);
    alert('chapter ' + chapter_id);
});

JS フィドルのデモ

これは実質的に、getter メソッド (特に値、テキスト、または HTML を返すメソッド)が、セレクターによって返された一致したセットの最初の要素のコンテンツのみを返すためです。

上記のアプローチはコンテキストを提供し、最も近い祖先要素を見つけて、その要素内で.storyInnerBlock検索を制限します。find()

参考文献:

于 2013-06-09T00:11:27.097 に答える
0

val() は、一致したセットの最初の要素の値のみを返すため、story_id と chapter_id はすべてのリンクで同じです。 ループ内の各一致をステップ実行する必要があります。実際には、 click() 関数内で $(this) を使用して、一致したセット内の現在の要素を参照するだけで済みます。これは、click() 関数が一致したセットに対して暗黙的なループを実行するためです。

$(document).ready( function() {

  $('.storyInnerBlock').on('click', function(){
    var story_id = $(this).children('.story_id').val()
    var chapter_id = $(this).children('.chapter_id').val()
    console.log(story_id + "<--->" + chapter_id);
  });

});
于 2013-06-09T00:08:55.353 に答える