zoukankan      html  css  js  c++  java
  • document.body.removeChild 获取到 symbol 标签

    在做全局loading时,出现的问题,使用 antd-mobile 中 Icon 组件,导致 loading组件无法关闭的问题,

    loading.jsx

    import React from 'react';
    import ReactDOM from 'react-dom';
    import { Icon } from 'antd-mobile';
    import './style.less';
    
    class Loading {
      static animating = false
      open () {
        Loading.animating = document.getElementById('loading')
        if (Loading.animating) return;
        const dom = document.createElement('div')
        dom.setAttribute('id', 'loading')
        document.body.appendChild(dom)
        ReactDOM.render(
          <div className='load' id='load'>
            <Icon type='loading' />
          </div>, dom
        )
      }
      close () {
        console.log(document.getElementById('loading'))
        document.body.removeChild(document.getElementById('loading'))
      }
    }
    
    export default new Loading();

    调用顺序

    Loading.open()

    setTimeout(() => {

     Loading.close()

    }, 1000);

    打印出的信息

    出现 问题:

    Loading.close() 方法执行时,无法清除元素,即  document.body.removeChild(document.getElementById('loading'))  方法无效
     
     
     
    解决
    由 Icon 组件 改为  ActivityIndicator 组件, console.log(document.getElementById('loading'));  即可获得到 正常 的 div元素,即 可通过removeChild  清除
    import React from 'react';
    import ReactDOM from 'react-dom';
    import { ActivityIndicator } from 'antd-mobile';
    import './style.less';
    
    class Loading {
      static animating = false
      open () {
        Loading.animating = document.getElementById('loading')
        if (Loading.animating) return;
        const dom = document.createElement('div')
        dom.setAttribute('id', 'loading')
        document.body.appendChild(dom)
        ReactDOM.render(
          <div className='load' id='load'>
            <ActivityIndicator size="large" />
          </div>, dom
        )
      }
      close () {
        const ld = document.getElementById('loading')
          if (ld) {
            document.body.removeChild(ld)
          }
      }
    }
    
    export default new Loading();
    原因
    Icon 组件实际为一个 SVG 标签,所以会获取到 symbol 标签
  • 相关阅读:
    C++测试代码运行时间的模板
    Java学习第三天
    JAVA学习第二天
    Java第一天
    windows 查看端口号,关闭端口进程
    SAML 2.0简介(1)
    response 重定向
    Springboot+Mybatis+小程序
    Receiver class com.mchange.v2.c3p0.impl.NewProxyResultSet does not define or inherit an implementation of the resolved method 'abstract boolean isClosed()' of interface java.sql.ResultSet.
    Mysql常用语句
  • 原文地址:https://www.cnblogs.com/-roc/p/15070385.html
Copyright © 2011-2022 走看看