Я создал систему голосования для моего проекта. Я попытался использовать приведенный ниже код, который работает правильно, но html() не работает с этим. Кто-нибудь может мне помочь с этим?

$(document).ready(function() {
  $(".up").click(function() {
    $(this).addClass('active_vote');
    $('.active_vote').closest('.rating').html('18');
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="suggestions">
  <li id="59">
    <div class="vote active ">
      <div class="support-feature-request-voted">
        <div class="rating">
          10
        </div>
        <span>Voted</span>
      </div>
    </div>
    <div class="title">hii</div>
    <div class="desc">desc1</div><br>
    <a class="up">UP VOTE</a><a class="down">DOWN VOTE</a>
  </li>
  <li id="60">
    <div class="vote active ">
      <div class="support-feature-request-voted">
        <div class="rating">
          8
        </div>
        <span>Voted</span>
      </div>
    </div>
    <div class="title">hello</div>
    <div class="desc">desc2</div><br>
    <a class="up">UP VOTE</a><a class="down">DOWN VOTE</a>
  </li>
</ul>
1
MNJ 24 Окт 2019 в 13:57

2 ответа

Лучший ответ

Проблема в том, что .rating не является родителем элемента .up, который вызывает событие click.

Чтобы это исправить, вы могли бы использовать closest() для получения ближайшего общего родителя, в данном случае li, а затем find() для получения .rating. Также обратите внимание, что оба оператора в обработчике событий могут быть объединены. Попробуй это:

let result2 = "Lorem ipsum";

jQuery(function() {
  $(".up").on('click', function() {
    $(this).addClass('active_vote').closest('li').find('.rating').html(result2);
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="suggestions">
  <li id="59">
    <div class="vote active">
      <div class="support-feature-request-voted">
        <div class="rating">
          10
        </div>
        <span>Voted</span>
      </div>
    </div>
    <div class="title">hii</div>
    <div class="desc">desc1</div><br>
    <a class="up">UP VOTE</a><a class="down">DOWN VOTE</a>
  </li>
  <li id="60">
    <div class="vote active">
      <div class="support-feature-request-voted">
        <div class="rating">
          8
        </div>
        <span>Voted</span>
      </div>
    </div>
    <div class="title">hello</div>
    <div class="desc">desc2</div><br>
    <a class="up">UP VOTE</a><a class="down">DOWN VOTE</a>
  </li>
</ul>
2
Rory McCrossan 24 Окт 2019 в 11:02

Используйте parent с find.

$(document).ready(function() {
  $(".up").click(function() {
    $(this).addClass('active_vote');
    $(this).parent().find('.rating').html('result2'); // Your upvote logic goes with result2
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="suggestions">
  <li id="59">
    <div class="vote active ">
      <div class="support-feature-request-voted">
        <div class="rating">
          10
        </div>
        <span>Voted</span>
      </div>
    </div>
    <div class="title">hii</div>
    <div class="desc">desc1</div><br>
    <a class="up">UP VOTE</a><a class="down">DOWN VOTE</a>
  </li>
  <li id="60">
    <div class="vote active ">
      <div class="support-feature-request-voted">
        <div class="rating">
          8
        </div>
        <span>Voted</span>
      </div>
    </div>
    <div class="title">hello</div>
    <div class="desc">desc2</div><br>
    <a class="up">UP VOTE</a><a class="down">DOWN VOTE</a>
  </li>
</ul>
0
Shree 24 Окт 2019 в 11:15