首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jquery删除并添加列表项上的类?

使用jquery删除并添加列表项上的类?
EN

Stack Overflow用户
提问于 2018-10-01 08:59:37
回答 3查看 54关注 0票数 1

我有一个带有保存post文本的列表项,它有一个save-post类,当我单击它时,我想将这个列表项的文本更改为取消保存的帖子,并在取消保存的post类中替换类save-post,我尝试这样做,但是列表项文本和类中的更改只发生了一次。

代码语言:javascript
复制
$('.save-post').click(function(){
  $(this).text('Unsave Post');
  $(this).removeClass('save-post');
  $(this).addClass('unsave-post');
});    
$('.unsave-post').click(function(){
  $(this).text('Save Post');
  $(this).removeClass('unsave-post');
  $(this).addClass('save-post');
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-xs-2 col-sm-2 col-md-2 drop">
   <a href=""><i class="fa fa-ellipsis-v post-drop"></i></a>
   <div class="drop-content">
     <ul>
       <li class="save-post">Save post</li>
     <li>Report post</li>
     <li>Hide post</li>
     <li>Unfollow User</li>
   </ul>
   </div>
</div>

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-01 09:06:29

您可以使用toggleClass()方法,然后检查应用类并追加适当的文本。

代码语言:javascript
复制
$(document).on('click', '.save-post, .unsave-post', function(e) {
  var that = $(e.currentTarget);
  that.toggleClass('save-post unsave-post');
  if (that.hasClass('save-post')) {
    that.html('Save post');
  } else {
    that.html('Unsave post');    
  }  
});
代码语言:javascript
复制
.save-post {
  color: green
}
.unsave-post {
  color: red
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li class="save-post">Save post</li>
  <li class="save-post">Save post</li>
  <li class="save-post">Save post</li>
</ul>

票数 2
EN

Stack Overflow用户

发布于 2018-10-01 09:04:44

当您使用.click()是绑定事件到目标选择器时,但是单击它之后,类更改为另一个类。您应该为此使用事件委托

代码语言:javascript
复制
$(document).on('click', '.save-post', function(){
    $(this).text('Unsave Post');
    $(this).removeClass('save-post');
    $(this).addClass('unsave-post');
});    
$(document).on('click', '.unsave-post', function(){
    $(this).text('Save Post');
    $(this).removeClass('unsave-post');
    $(this).addClass('save-post');
});

代码语言:javascript
复制
$(document).on('click', '.save-post', function(){
    $(this).text('Unsave Post');
    $(this).removeClass('save-post');
    $(this).addClass('unsave-post');
});    
$(document).on('click', '.unsave-post', function(){
    $(this).text('Save Post');
    $(this).removeClass('unsave-post');
    $(this).addClass('save-post');
});
代码语言:javascript
复制
.save-post {color: red}
.unsave-post {color: blue}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-xs-2 col-sm-2 col-md-2 drop">
  <a href=""><i class="fa fa-ellipsis-v post-drop"></i></a>
  <div class="drop-content">
    <ul>
      <li class="save-post">Save post</li>
      <li>Report post</li>
      <li>Hide post</li>
      <li>Unfollow User</li>
    </ul>
  </div>
</div>  

票数 1
EN

Stack Overflow用户

发布于 2018-10-01 09:09:53

使用.click只会将事件附加到已经存在的元素。

您需要使用事件处理程序来监视动态创建的单击事件,如下面的on('click',

然后,您可以像这样使用toggleClass

代码语言:javascript
复制
$('.save-post').on('click',function(){
   if ($(this).text() == "Save post")
      $(this).text("Unsave post")
   else
      $(this).text("Save post");
   $(this).toggleClass('save-post');
   $(this).toggleClass('unsave-post');
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-xs-2 col-sm-2 col-md-2 drop">
   <a href=""><i class="fa fa-ellipsis-v post-drop"></i></a>
   <div class="drop-content">
     <ul>
         <li class="save-post">Save post</li>
         <li>Report post</li>
         <li>Hide post</li>
         <li>Unfollow User</li>
     </ul>
   </div>
</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52587622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档