• 解决js动态改变html元素而html内容只在初末时改变的问题


    问题描述

    管理的OJ后台需要添加多个题目,手动添加太麻烦,于是写js脚本通过F12的控制台自动添加。

    但每次添加搜索时内容是由ajax异步请求渲染出来的,就导致了问题,循环添加数据时html状态总是一开始的状态,后面添加的题目就获取不到元素。

    把所有步骤输入一次回车一次能获取到,但封装起来的循环函数回车运行就报错读取不到ajax获取的数据
    在这里插入图片描述

    问题解决

    问题分析

    首先ajax的内容是异步加载的,假设初始页面A在运行js,普通的代码,没设立延时,js是默认一次加载完的,就是假设你有N个for循环去做一件事,但它是默认for循环完整在A页面的html下进行完的,并且这时候即使js动态改变了页面内容,页面也仅仅是从A-》B的状态,并且中间不可控,且假设此时js触发了ajax渲染了新的数据,运行中的js仍旧是在页面A拿数据,所以问题点就在于让它动态运行,并且画面是随着for循环进行而改变的。

    问题解决

    就相当于如何让进度条从 只显示0-> 100变成从0过度到100

    //只显示0->100的不合要求的写法
    var now = 0
    var Time = 20
    for(now = 0; now <= 100; now++){
      //动态改变界面元素
      console.log("当前进度条是"+now);
      //控制台照常动态打印0-100,但html界面只有初末0和100
    }
    

    将for循环的内容封装成函数,通过 window.setTimeout循环调用模拟for循环即可

    //改动后两边同时动态加载,并且过程中界面的可控动态更新的
    var now = 0
    var Time = 20
    var loading = function(){
      if(now > 100)
        return
      //动态改变界面元素
      console.log("当前进度条是"+now);
      //再一次唤醒该函数并且此时动态加载界面
      window.setTimeout(loading , Time); 
    }
    

    注意点1:不能用自写延时函数去替代window.setTimeout
    注意点2:可以理解成window.setTimeout可以将ajax处理的新页面让js动态获取变化的html页面,并且此时html可操控。

    关于N循环内加多步骤的处理方法

    这个就是我的问题的情况,大概流程是

    for循环添加N个题目{
    	1.js模拟键盘搜索题目 (此时页面就通过ajax渲染了新的数据)
    	2.js模拟点击添加搜索出来的题目
    	3.js填写题目信息
    	4.js确定添加
    }
    直接就卡死在步骤2,因为获取的界面总是A界面,页面动不了,
    并且新搜索的题目js一直拿不到,但它确实又更新在html里面
    

    解决方法:
    首先可以肯定的是封装函数和激活调用,但现在情况是要for循环的内容也是要依次进行的,封装起来,中间过程1->过程2也会出现问题,所以需要依次激活

    var index = 0
    var time = 20;
    var step1 = 函数{
    	//第一个函数负责判断退出
    	if(0>N) return
    	[js模拟键盘搜索题目]
    	//Time延迟后激活步骤二
    	//此时ajax更新数据通过延时html页面就能动态获取了
    	window.setTimeout(step2, Time);
    }
    var step2 = 函数{
    	[js模拟点击添加搜索出来的题目]
    	window.setTimeout(step3, Time);
    }
    var step3 = 函数{
    	[js填写题目信息]
    	window.setTimeout(step4, Time);
    }
    var step4 = 函数{
    	[js确定添加]
    	//回调步骤1
    	window.setTimeout(step1, Time);
    }
    //开启循环
    window.setTimeout(step1, Time);
    

    一开始及时能运行也是运行过程左边界面没动,等js运行完才显示改变后的内容。
    更改后最后的效果就是很好的动态显示了过程啦
    在这里插入图片描述

  • 相关阅读:
    白话https
    网络分层体系结构
    软件度量
    【Java】itext根据模板生成pdf(包括图片和表格)
    【java】Freemarker 动态生成word(带图片表格)
    压力测试-接口关联
    压力测试-录制脚本
    jmeter性能测试2:基础功能介绍
    jmeter性能测试1:目录解析
    桃花运
  • 原文地址:https://www.cnblogs.com/404name/p/14634077.html
Copyright © 2020-2023  润新知