2016-04-11 2 views
2

Я новичок в JQuery. Когда я нажимаю первую ссылку, он отправляет запрос Ajax на сервер и возвращается с некоторыми данными. До сих пор все хорошо. В обратном вызове я хочу изменить текст diplay второй ссылки. например, 6 людям понравилось. Я много искал, но не мог заставить его работать.Обновление ссылки при нажатии другой ссылки с помощью jquery

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

Я попытался что-то изменить, чтобы изменить текст второй ссылки. Но я не могу изменить текст. Мой вопрос в том, как я выбираю и изменяю текст второй ссылки.

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

Мой Ajax код что-то вроде:

$(".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 на странице, но я не хочу им мешать. Я просто хочу изменить текст ссылки someClass-2 в текущем div.

+1

где ваш код php? – uzaif

+0

Как выглядит ваш взгляд на ajax? – uzaif

+0

Проблема с получением данных от Ajax или ваша проблема в выборе правильного элемента и изменении текста? – Tinmar

ответ

1

Почему вы используете $(this)? Если у вас есть уникальный идентификатор, используйте его.

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

И, конечно, положить, что в Ajax success функции.

EDIT:

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() для выбора всех братьев и сестер, чем фильтровать его по классу или .next(), если вам нужно выбрать только следующий родственный.

Кроме того, будьте осторожны, когда вы помещаете переключатель ... Вы поместили его в вызов Ajax, а не в click(), и из-за этого он изменил его значение.

+0

Если вам действительно нужно использовать этот относительный селектор, сообщите нам и поместите весь код вызова Ajax. – Tinmar

+0

Спасибо. Это сработало. '.next()' не работает, но '.sibling()' работал нормально. –

+0

Отлично! Примите мой ответ, если это то, что вам нужно. ;) А также - рассмотрите все голосовые ответы, которые вы сочтете полезными. – Tinmar

1

Изменить этот

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

к этому

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

Это изменит все тексты ссылок, имеющие класс «someClass-2». Я просто хочу изменить текст ссылки в текущем div –

+0

'$ (this) .parent(). Children (" a.someClass-2 "). Text (" new text "); 'Из вашего html неясно, что существует более одного элемента этого класса. –

+0

Большое спасибо. Он работает сейчас. –

0

Может что-то вроде этого?

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

... но мне непонятно, где разместить эту строку в коде.

+0

Это изменит текст всей ссылки с классом «someClass-2». –

+0

Это изменит все тексты ссылок, имеющие класс «someClass-2». Я просто хочу изменить текст ссылки в текущем div –

2

Использование next()

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

с AJAX создать переменную с текущим элементом:

$(".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

попробуйте второй вариант – madalinivascu

1

Я думаю, что это поможет вам

$('#some-id .someClass-2').text('6 people liked it'); 

он заменит html всех someclass-2 в # some-id.

Смежные вопросы