首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >已经替换的元素上的replaceWith

已经替换的元素上的replaceWith
EN

Stack Overflow用户
提问于 2018-08-15 08:55:30
回答 1查看 41关注 0票数 1

我非常清楚,当您使用replaceWith()时,它会从DOM中移除元素并替换它,但是如何传递新创建的元素以便能够再次替换它呢?

例如,我有一个图标,它的onclick=""事件如下所示

代码语言:javascript
复制
<i onclick="toggleStatus(true, this, '.$user->id.')" class="icon-red fas fa-times"></i>

然后运行以下函数,该函数用加载轮替换图标。当新的加载轮替换DOM中的这个元素时,如何传递新创建的加载轮,以便能够再次替换它?

到目前为止,这就是我所拥有的

代码语言:javascript
复制
window.toggleStatus = function(status, elem, id){
    var $i = $(elem);
    //Replace the icon with a spinning wheel for effect

    $i.removeClass().addClass('fa fa-spinner animation-spinning');

    setTimeout(function(){
       if(status){
            $i.removeClass('fa fa-spinner animation-spinning').addClass('direct-debit-icon icon-green fas fa-check').attr('onclick','toggleStatus(false, this, '+id+')');
       } else {
            $i.removeClass('fa fa-spinner animation-spinning').addClass('direct-debit-icon icon-red fas fa-times').attr('onclick','toggleStatus(true, this, '+id+')');
       }
    },1000);
}

备注我必须使用replaceWith(),不能使用字体Awese5将元素类更改为im,这样<i>元素就可以像下面这样被SVG替换

代码语言:javascript
复制
<svg onclick="toggleStatus(false, this, 1)" class="svg-inline--fa fa-check fa-w-16" aria-hidden="true" data-prefix="fa" data-icon="check" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" data-fa-i2svg=""><path fill="currentColor" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>

这个问题是根据下面的一个答案及其评论进行编辑的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-15 09:10:40

您根本不需要替换元素。考虑到您的逻辑,您可以使用add/remove/toggle类修改单个<i>实例上的类。

还要注意,您应该使用不引人注目的事件处理程序(特别是已经在页面中包含了jQuery ),而不是使用过时的on*事件属性。

说了这么多,试试这个:

代码语言:javascript
复制
$('i').click(function() {
  var $i = $(this);
  var userId = $i.data('userid');
  console.log(userId);
  
  $i.removeClass('icon-red icon-green fa-check fa-times').addClass('fa-spinner fa-spin');
  
  var status = Math.random() > 0.5; // just for testing
  setTimeout(function() {
    $i.removeClass('fa-spinner fa-spin');
    if (status) {
      $i.addClass('icon-green fa-check')
    } else {
      $i.addClass('icon-red fa-times');
    }
  }, 1000);
});
代码语言:javascript
复制
.icon-red { color: #C00; }
.icon-green { color: #0C0; }
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" />

<i data-userid="abc-123" class="icon-red fas fa-times"></i>
<i data-userid="zxy-987" class="icon-red fas fa-times"></i>

请注意,上面使用的是字体v5,因此animation-spinning类已更改为fa-spin

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

https://stackoverflow.com/questions/51855722

复制
相关文章

相似问题

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