2016-04-11 13 views
2

JQueryを初めて使用しています。最初のリンクをクリックすると、Ajaxリクエストがサーバーに送信され、いくつかのデータが返されます。今はすべてが良いです。コールバックでは、第2リンクの表示テキストを変更したいと思います。たとえば - 6人が好きだった。私は多くを検索しましたが、それを働かせることはできませんでした。jqueryを使用して別のリンクをクリックしてリンクを更新する

<div class="container" id="some-id"> 
    <a class="someclass-1">Like</a> 
    <a class="someClass-2">5 people liked it</a> 
</div> 

2番目のリンクのテキストを変更するようなものを試しました。しかし、私はテキストを変更することはできません。私の質問は、どのようにして2番目のリンクのテキストを選択して変更するかだけです。

$(".someClass-1").click(function(e) { 
     if ($(this).html() == "Like") { 
      var parameters = { statusId: $(this).closest('div').attr('some-id')}; 
      $.get(
       "/like", 
       parameters, 
       function(data) { 
       $(this).closest('div').find('.someClass-2').html(data + ' people liked it.'); 
       } 
     ); 
     } 

私はページ上のクラスsomeClass-2のより多くのリンクを持っているが、私はそれらを邪魔したくない:

$(this).closest('div').find('.someClass-2').html('6 people liked it'); 

私のAjaxコードのようなものです。私は現在のdivsomeClass-2リンクのテキストを変更したいだけです。この

$(this).parent().children("a.someClass-2").text("new text"); 
+1

あなたのPHPコードはどこですか? – uzaif

+0

あなたのajaxコールはどのように見えますか? – uzaif

+0

Ajaxからデータを取得するのに問題があるのですか、または右要素を選択してテキストを変更する際に問題がありますか? – Tinmar

答えて

1

なぜあなたは$(this)を使用していますか?固有の識別子を持っている場合は、それを使用してください。

$(".someClass-2").text("6 people liked it"); 

もちろん、Ajax successの機能に入れてください。

EDIT:すべての兄弟を選択すると、あなただけの次の兄弟を選択する必要がある場合は、クラスまたは.next()ことによってそれをフィルタリングするより

var dataNumber; 

$(".someClass-1").click(function(e) { 
    myElement = $(this); 
     if ($(this).html() == "Like") { 
      var parameters = { statusId: $(this).closest('div').attr('some-id')}; 
      $.get(
       "/like", 
       parameters, 
       function(data) { 
       myElement.siblings('.someClass-2').html(data + ' people liked it.'); 
       } 
     ); 
     } 

使用.siblings()

また、セレクタを置く場所に注意してください...あなたはclick()の機能ではなく、Ajaxコールに入れました。そのため、値が変更されています。 Ajaxで

+0

この相対セレクタを実際に使用する必要がある場合は、Ajaxのコールコード全体をお知らせください。 – Tinmar

+0

ありがとうございます。出来た。 '.next()'は動作しませんでしたが、 '.sibling()'は正常に動作しました。 –

+0

素晴らしい!それがあなたが必要とするものなら、私の答えを受け入れてください。 ;)また、あなたが役に立つと思っているすべての回答をアップ投票することを検討してください。 – Tinmar

1

変更この

$(this).closest('div').find('.someClass-2').html('6 people liked it');` 

$('.someClass-2').html('6 people liked it'); 

...しかし、あなたのコードにその行をどこに入れるのかはわかりません。

+0

これは、クラス 'someClass-2'を持つすべてのリンクのテキストを変更します。現在のdiv内のリンクのテキストを変更したいだけです。 –

+0

'$(this).parent()。children(" a.someClass-2 ")。text(" new text "); 'あなたのHTMLからは、このクラスの要素が複数あることは明らかではありません。 –

+0

ありがとうございます。それは今働いている。 –

0
たぶん

このような何かに

+0

これは、 'someClass-2'クラスを持つすべてのリンクのテキストを変更します。 –

+0

これは、クラス 'someClass-2'を持つすべてのリンクのテキストを変更します。現在のdiv内のリンクのテキストを変更したいだけです –

2

使用next()

$(this).next('.someClass-2').html('6 people liked it'); 

現在の要素を持つ変数を作成:

$(".someClass-1").click(function(e) { 
     var el = $(this);///see here 
     if ($(this).html() == "Like") { 
      var parameters = { statusId: $(this).closest('div').attr('some-id')}; 
      $.get(
       "/like", 
       parameters, 
       function(data) { 
       el.next('.someClass-2').html(data + ' people liked it.');//if you use $(this) i will refer to the ajax object 
       } 
     ); 
     } 

か:

$(".someClass-1").click(function(e) { 
      var el = $(this);///see here 
      if ($(this).html() == "Like") { 
       var parameters = { statusId: $(this).closest('div').attr('some-id')}; 
       $.get(
        "/like", 
        parameters, 
        function(data) { 
        el.parent().find('.someClass-2').html(data + ' people liked it.');//if you use $(this) i will refer to the ajax object 
        } 
      ); 
      } 
+0

これは機能しません。テキストは変更されません。 –

+0

2番目のオプションを試してください – madalinivascu

1

を私はこれがあなたに

に役立つと思います

#some-idのすべてのsomeclass-2のhtmlを置き換えます。

関連する問題