【JavaWeb】了解JavaScript DOM API

news2024/11/15 7:09:08

目录

1、什么是DOM

1.1、DOM树

1.2、 了解事件

2、常用的DOM API

2.1、选中页面元素

2.2、获取/修改元素内容

2.2.1、innerHTML和innerText

 2.2、获取/修改元素属性

2.3、获取/修改表单元素属性

3、JQuery框架的简单了解和使用

4、代码案例:实现聚合索引功能

5、代码案例:实现表白墙


1、什么是DOM

DOM全称为Document Object Model 。是页面文档模型,html中的每个标签都是可以映射到JS中的一个对象的,标签中的内容都可以通过JS对象感知到,JS对象修改对应的属性能够影响到标签的展示,通过这样的DOM API就可以让JS代码来操作页面元素。

JavaScript主要是由基础语法部分(ECMAScript)、操作页面结构(DOM API)和BOM API(操作浏览器)这三部分组成;我们知道要完成一个程序,光有语法是不够的,对于JS来说,除JS语法外,还需要掌握一些WebAPI,这邪恶API是浏览器对JS代码提供的功能,即DOM和BOM;DOM是页面文档对象模型,可以对页面中的元素进行操作,而BOM是浏览器对象模型,可以对浏览器窗口进行操作。下面我们来了解DOM。


1.1、DOM树

我们在用前端代码完成一个页面的时候,可以感受到,他的代码格式是一个树形结构。

🌈 概念解释:

  • 文档:一个页面就是一个文档,使用document表示
  • 元素:页面中所有的标签都称为元素,使用element表示
  • 结点:网页中所有的聂荣都可以成为结点(标签结点、注释结点、文本结点、属性结点),使用node表示。

1.2、 了解事件

🍂基本概念

JS要构建动态页面,就要感知到用户的行为。用户对于页面的一些操作(点击、选择、修改等)操作都会在浏览器中产生一个个事件,被JS获取到,从而进行更复杂的交互操作。

🍂事件的三要素

  1. 事件源:那个HTML元素触发的
  2. 事件类型:是点击,选中还是修改
  3. 事件处理程序:进一步如何处理,往往是一个回调函数

🍂示例

<body>
    <button id="btn">点我一下</button>
    <script>
      var btn = document.getElementById('btn');
      btn.onclick = function(){
        alert("你好世界");
      }
    </script>  
</body>

✨注意:

  • btn按钮就是事件源
  • 点击就是事件类型
  • function这个匿名函数就是事件处理程序
  • 其中btn.onClick = function()这个操作成为注册事件/绑定事件

这个匿名函数就相当于一个回调函数,这个函数不需要程序员主动来调用,而是交给浏览器,由浏览器自动在合适的时机(触发点击操作时)进行调用。


2、常用的DOM API

在DOM中,任何一个页面,都会有一个document对象,是页面的一个全局对象,所有的DOM API都是通过document对象来展开的。

2.1、选中页面元素

这里我们了解三个方法:

1️⃣querySelector函数可以用来选择元素,是通过传入CSS选择器来达到目的的选择的范围是位与之前所存在的选择器,没有找到,返回值为null也可以在任何元素(标签)上使用,不仅仅是文档(document对象)。调用这个方法的元素作为本次查找的根元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>document</title>
</head>
<body>
    <div class="one">abc</div>
    <div id= 'id'>efg</div>
    <h3>你好世界</h3>
   <style>
    .one{
        width:50px;
        height:50px;
        text-align: center;
        line-height: 50px;
        background-color: rgb(200, 150, 150);
    }
    #id{
        width:50px;
        height:50px;
        text-align: center;
        line-height:50px;
        background-color:rgb(0,255,255);
    }
   </style>
    <script>
       var elem1 = document.querySelector('.one');
       console.log(elem1);
       var elem2 = document.querySelector('#id');
       console.log(elem2);
       var elem3 = document.querySelector('h3');
       console.log(elem3);
    </script>
    
</body>
</html>

 要注意使用querySelector函数如果符合选择的标签在页面中有多个,就只会选择在页面中第一次出现的标签。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js demo2</title>
</head>
<body>
    <ul>
        <li>你好</li>
        <li>世界</li>
        <li>!!!!</li>
    </ul>
    <script>
       var elem1 = document.querySelector('li');
       console.log(elem1);
  
    </script>
    
</body>
</html>

 2️⃣querySelectAll函数的使用方式和上面的类似,如果想把符合选择的元素都选中就可以使用querySelectorAll函数。使用该函数会返回一个类似于数组的对象,用法和数组相同

<body>
    <ul>
        <li>你好</li>
        <li>世界</li>
        <li>!!!!</li>
    </ul>
    <script>
       var elem1 = document.querySelectorAll('li');
       console.log(elem1);
  
    </script>
    
</body>

 将得到的数组对象里面的元素展开查看,会发现很多的属性,这些属性都是DOM原生的一些属性。

 

 3️⃣使用getElementById函数也可以选中页面中的元素。这个方法返回的是一个匹配特定ID的元素(Element对象),若在当前文档(Document对象)下没有找到,则返回null;由于元素ID在大部分情况下要求是独一无二的,这个方法自然而然的成为了一个高效查找特定元素的方法。

<body>
    <img width="200px" height="120px" id="img_logo" src="D:/风景.jpg">
    <p></p>
    <input onclick="upImg()" type = "button" value="更换图片">
    <script>
      function upImg() {
        var sg_img = "D:/风景2.jpg";
        document.getElementById("img_logo").src = sg_img;
      }
    </script>  
</body>


2.2、获取/修改元素内容

2.2.1、innerHTML和innerText

 在选中元素之后,就可以使用innerHTML属性来获取/修改一个标签里面的内容了。下面我们通过这个简易的猜数字游戏程序来了解innerHTML属性。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js demo2</title>
</head>
<body>
    <div>
        <h3>猜数字游戏</h3>       
        玩家输入一个1~10的数字:<input id="input_num" type="text"><p></p>
        <input type="button" value="查看结果" onclick="selectResult()">
    </div>
    //用来接收最终结果
    <div id="result_div"></div>
    
    <script>
     function selectResult(){
        var randomNum = 1+Math.floor(Math.random()*10);
        var userInputMun = document.getElementById('input_num').value;
        var msg;
        if(randomNum == userInputMun){
                msg ="<h4>恭喜你,猜对了</h4>";

        }else{
            msg = "<h4>抱歉,猜错了,正确的数字是:"+randomNum+"</h4>";
        }
        //先获取到事件源
        var name = document.getElementById("result_div");
        //修改页面内容,将div标签中的内容修改成为msg对象中的内容
        name.innerHTML = msg;  
     }
    </script>  
</body>
</html>

 需要注意的是,通过innerHTML是可以获取到div内部的html结构的,比如下面的代码,会将div标签中的html代码也获取到,而InnerText只能获取文本内容,并不能获取html结构,innerHtml使用的场景比innerText更多。

<body>
    <div>
        <span>hello world</span>
        <span>hello world</span>
    </div>
    <button class="but">点我一下</button>
    <script>
        var but = document.querySelector(".but");
        but.onclick = function(){
            var div = document.querySelector('div');
            console.log(div.innerHTML);
        }
    </script>
</body>

 

 innerText属性的用法和innerHTML相似,他显示的文本内容。还是用猜数字游戏的代码。

name.innerText = msg;  


 2.2、获取/修改元素属性

上面我们介绍了修改元素(标签)中的内容,我们还可以在代码中使用DOM直接获取元素的属性并修改元素的属性,比如我们实现一个点击一张图片就可以切换到另一个图片,然后再点击切换回来。这个案例中我们将点击事件设置为修改图片路径,也就是修改src属性。

<body>
    <style>
        img{
            height:200px;
        }
    </style>
    <img src="D:/scenery.jpg" alt="">
    <script !src>
       var img = document.querySelector('img');
       console.dir(img);
       img.onclick = function(){
            if(img.src.indexOf('wo')!== -1){
                img.src = 'D:/scenery.jpg';
            }else{
                img.src = 'D:/scenery2.jpg';
            }      
       }
    </script>
</body>

一个标签中具体有哪些属性可以修改,可以使用console.dir()函数来显示获取的标签中的所有属性。

 


2.3、获取/修改表单元素属性

这里把表单元素单拎出来是因为,表单中有一些特备的属性是普通标签没有的,主要需要区别的是一些表单元素想要获取其中用户输入的内容的话是不能通过innerHTML拿到的,这是因为input、textarea...这些标签元素都是但标签,是没有内容的,正确的获取/修改的方式应该是通过这写标签的value属性来进行。

比如input标签,还是在文本框中实现一下计数功能,同样的要注意拿到的value属性的值也是字符串类型的,要注意进行类型转换。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="text" id="text" value="0">
    <input type="button" id="btn" value='点我+1'>
    <script>
        var text = document.querySelector('#text');
        var btn = document.querySelector('#btn');
        btn.onclick = function () {
        var num = +text.value;
        console.log(num);
        num++;
        text.value = num;
   }  
</script>
  
</body>
</html>

  •  input具有一个重要的属性value,这个value决定了表单元素的内容
  • 如果是输入框,value表示输入框的内容,修改这个值会影响到界面显示;在界面上修改这个值也会影响到代码中的属性
  • 如果是按钮,value表示按钮的内容,可以通过这个来实现按钮中文本的替换。

🍂代码示例:全选/取消全选按钮

  1. 点击全选按钮,则选中所有选项
  2. 只要某个选项取消,则自动取消全选按钮的勾选状态。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<input type="checkbox" id="all">我全都要 <br>
<input type="checkbox" class="girl">貂蝉 <br>
<input type="checkbox" class="girl">小乔 <br>
<input type="checkbox" class="girl">安琪拉 <br>
<input type="checkbox" class="girl">妲己 <br>
<script>
    // 1. 获取到元素
    var all = document.querySelector('#all');
    var girls = document.querySelectorAll('.girl');
    // 2. 给 all 注册点击事件, 选中/取消所有选项
    all.onclick = function () {
        for (var i = 0; i < girls.length; i++) {
            girls[i].checked = all.checked;
       }
   }
    // 3. 给 girl 注册点击事件
    for (var i = 0; i < girls.length; i++) {
        girls[i].onclick = function () {
            // 检测当前是不是所有的 girl 都被选中了. 
            all.checked = checkGirls(girls);
       }
   }
    // 4. 实现 checkGirls
    function checkGirls(girls) {
        for (var i = 0; i < girls.length; i++) {
            if (!girls[i].checked) {
                // 只要一个 girl 没被选中, 就认为结果是 false(找到了反例)
                return false;
           }
       }
        // 所有 girl 中都没找到反例, 结果就是全选中
        return true;
   }
</script>

</body>
</html>

3、JQuery框架的简单了解和使用

JQuery是一个JavaScript库,JQuery极大的简化了JavaScript编程。我们将创建的html文件和JQuery框架程序放在一个目录中,也可以通过jQuery的路径来引入。想要使用的时候我们在html文件的head标签内部使用scirpt标签通过它的属性src就可以引用经当前的html文件中。

通过猜数字游戏来了解一下JQuery的使用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="E:\360MoveData\Users\26542\Desktop\jquery.min.js"></script>
</head>
<body>
    <div>
        <h2>猜数字游戏</h2>
        玩家输入一个1~10的数字: <input id="input_num" type = "text"><p></p>
        <input type="button" value="查看结果" onclick="selectResultJq()">
        <div id="result_div">456</div>
    </div>
    <script>
        // jquery猜数字游戏
        //jquery对JavaScript内置的函数没有处理,还是使用JavaScript原生的函数。
        //jQuery只是对拿组件的时候(操作DOM树的时候),处理方式和原生的api不同
        function selectResultJq(){
            var randomNum = 1+Math.floor(Math.random()*10);
            //我们可以使用$表示jQuery,也可以直接写jQuery,更建议使用jQuery表示,
            //因为我们在使用$表示jQuery时,JS的其他框架也会使用$,当我们只是用jQuery一种外部框架的时候
            //可以表示jQuery,但是当由多个外部的框架的时候,使用$就会出错。
            //原生的写法:document.getElementById("input num").value;
            var userInputNum = jQuery("#input_num").val();
            if(randomNum==userInputNum){
                msg = "<h4>恭喜你,猜对了</h4>";
            }else{
                msg = "<h4>抱歉,猜错了</h4>";
            }
            //原生的写法:document.getElementById("result_div").innerHTML = msg;
            jQuery("#result_div").html(msg);
        }
    </script>
</body>
</html>

 上面的代码显示结果使用的是显示html标签内的内容,我们也可以使用jQuerresult_div").text(msg);显示文本内容。

 使用 jQuery("#result_div").html();可以获取内容,使用jQuery("#result_div").html(msg);可以修改内容


4、代码案例:实现聚合索引功能

在实现这个代码之前,我们需要了解一下,前面博客中没有说到的iframe标签。他是HTML内联框架元素,表示嵌套上下文浏览(浏览器展示文档的环境),他能将另一个HTML页面嵌套到当前的页面中。

🌈代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>聚合搜索</title>
    <script src="E:\360MoveData\Users\26542\Desktop\jquery.min.js"></script>
</head>
<body>
    <div style="width:100% ;text-align: center;">
        <input type="button" value="必应" onclick="upSearch('https:www.bing.com/')">&nbsp;&nbsp;&nbsp;
        <input type="button" value="搜狗" onclick="upSearch('https:www.sogou.com/')">&nbsp;&nbsp;&nbsp;
        <input type="button" value="360" onclick="upSearch('https:www.so.com/')">&nbsp;&nbsp;&nbsp;
    </div>
    <hr>
    <iframe id="ifm" style="width:100%;height:600px" src="https://www.bing.com" ></iframe>
    <script>
        function upSearch(url){
            //先是通过jQuery()拿到组件,然后使用attr来设置属性,将src属性设置成传过来的url
            jQuery('#ifm').attr("src",url);

        }
    </script>
</body>
</html>

​​​​​​​

 


5、代码案例:实现表白墙

代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>表白墙</title>
    <script src="E:\360MoveData\Users\26542\Desktop\jquery.min.js"></script>
</head>
<body>
    <div>
        <h2>表白墙</h2>
        谁&nbsp;&nbsp;&nbsp;&nbsp;:<input id="username"><p></p>
        对谁&nbsp;&nbsp;:<input id="tousername"><p></p>
        说什么:<input id="msg"><p></p>
        <input type="button" value="提 交" onclick="mysub()"><p></p>
        <div id="div_allmsg"></div>
    </div>
    <script>
        function mysub(){
            var iptUserName = jQuery("#username");
            var iptToUserName = jQuery("#tousername");
            var iptMsg = jQuery("#msg");
            //1 、非空校验
                if(iptUserName.val().trim()==""){//tirm函数用来去除空格,这句代码的意思就是将输入框中的没有输入或者输入空格的情况选出来并给出提示。
                    alert("请先输入你的名字!")
                    //focus函数的作用就是聚焦,当iptUserName对应的输入框中,没有输入内容的时候,点击提交光标会回到第一个输入框中。
                    iptUserName.focus();
                    return;
                }
                if(iptToUserName.val().trim()==""){
                    alert("请先输入对方的名字!")
                    iptToUserName.focus();
                    return;
                }
                if(iptMsg.val().trim()==""){
                    alert("请先输入信息!")
                    iptMsg.focus();
                    return;
                }
            //2、将内容展示在表白墙
            jQuery('#div_allmsg').append(iptUserName.val()+"对"+iptToUserName.val()+"说:"+iptMsg.val()+'<p></p>');
            //3、清空输入的内容
            iptUserName.val("");
            iptToUserName.val("");
            iptMsg.val("");
        }
    </script>
    
</body>
</html>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/731478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python 常用数据结构-元祖

Tuple 元组 元组定义与使用元组常用方法元组与列表 元组定义 元组是有序的不可变对象集合元组使用小括号包围&#xff0c;各个对象之间使用逗号分隔定义元祖可以不用括号&#xff0c;直接使用,隔开元组是异构的&#xff0c;可以包含多种数据类型 元组使用&#xff1a;创建 …

解决Unity的PostProcess奇怪报错

大家好&#xff0c;我是阿赵。   最近在使用Unity的PostProcess后处理效果的时候&#xff0c;发现了一个问题&#xff0c;下面记录一下这个问题的出现原因和解决办法。 一、出现问题 问题是这样出现的&#xff1a;   在场景里面添加某一个后处理效果后&#xff0c;当这个后…

JUC之ThreadLocal

文章目录 1 基础知识1.1 强软弱虚四种引用 2 ThreadLocal出现的好处3 ThreadLocal源码分析3.1 ThreadLocal内存泄露问题3.2 ThreadLocal为什么使用的是弱引用3.3 清扫过期的Entry 4 ThreadLocal使用建议 1 基础知识 1.1 强软弱虚四种引用 【整体结构】 【强引用】 【软引用…

(文件[夹]批量分类整理_多级匹配_交叉匹配_路径结构交叉调整)文件[夹]批量复制

​ 首先&#xff0c;需要用到的这个工具&#xff1a; 百度 密码&#xff1a;qwu2 蓝奏云 密码&#xff1a;2r1z ​如果没有使用过此工具&#xff0c;建议阅读此教程前&#xff0c;先看下这篇文章&#xff1a;https://mp.csdn.net/mp_blog/creation/editor/113605549 原理&…

【Python爬虫与数据分析】文件读写

目录 一、概述 二、txt文件读写 三、csv文件读写 四、Json文件读写 一、概述 读写模式&#xff1a; r&#xff1a;读数据w&#xff1a;覆盖写入a&#xff1a;追加写入rb&#xff1a;以二进制形式读出wb&#xff1a;以二进制形式写入ab&#xff1a;以二进制形式追加r、w、…

Java log 日志

文章目录 log4j.properties配置 log4j.properties 配置 log4j.rootLoggerINFO, stdoutlog4j.appender.stdoutorg.apache.log4j.ConsoleAppender log4j.appender.stdout.layoutorg.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern%d{yyyy-MM-dd H…

MySQL单表查询练习题

目录 第一题 第二题 第三题 第一题 1.创建数据表pet&#xff0c;并对表进行插入、更新与删除操作&#xff0c;pet表结构如表8.3所示。 (1&#xff09;首先创建数据表pet&#xff0c;使用不同的方法将表8.4中的记录插入到pet表中。 mysql> create table pet( name varchar(…

网络安全(黑客)内网渗透基础知识

0x01 内网概述 内网也指局域网&#xff08;Local Area Network&#xff0c;LAN&#xff09;是指在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的历程安排、电子邮件和传真通信服务等功能。 内…

交叉导轨的结构与特长

在交叉导轨中&#xff0c;精密滚柱互相直交地组合在一起的滚柱保持架与设置在专用轨道上的90V形沟槽滚动面组合起来使用。通过将2列滚子导轨平行地装配&#xff0c;使导轨系统能承受4个方向的负荷。而且&#xff0c;因能向交叉滚子导轨施加预压&#xff0c;从而能获得无间隙且高…

zookeeper单机安装

1 检查环境jdk 参考&#xff1a;https://blog.csdn.net/weixin_44098426/article/details/128446376 2 解压安装包 mkdir -p /opt/zookeeper mv /home/wh/software/zk/apache-zookeeper-3.5.7-bin.tar.gz /opt/zookeeper tar -xzvf apache-zookeeper-3.5.7-bin.tar.gz 3 配置…

在Windows环境下安装Elasticsearch 8.8.2

Elasticsearch是一种开源的分布式搜索和分析引擎&#xff0c;被广泛应用于构建实时搜索、日志分析、数据可视化等应用。本文将详细介绍如何在Windows环境下安装和配置Elasticsearch 8。 安装Elasticsearch 步骤1&#xff1a;准备工作 在开始安装之前&#xff0c;确保已满足以…

多元回归预测 | Matlab灰狼算法(GWO)优化极限梯度提升树XGBoost回归预测,GWO-XGBoost回归预测模型,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab灰狼算法(GWO)优化极限梯度提升树XGBoost回归预测,GWO-XGBoost回归预测模型,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源…

GPON MAC SFP ONU模块介绍与应用

伴随着网络通讯技术的发展&#xff0c;pon无源光网络正逐步走进人们的视野&#xff1b;在这之前你是否仅知道以太网接入&#xff1f;相比与以太网接入&#xff0c;pon作为一种点到多点网络&#xff0c;具有运维成本低、服务范围广、资源占用少等优势&#xff1b;我们最为熟知的…

CSS自学框架之漂浮提示(上方显示 底侧显示 右侧显示 左侧显示)

漂浮提示可以用较为隐藏的方式为用户提供帮助或引导信息&#xff0c;将鼠标移入文字内容后展示。 css代码&#xff1a; /* 浮漂提示框 */[myth-tag]{ position: relative }[myth-tag]:before, [myth-tag]:after{z-index: 1;opacity: 0;position: absolute;pointer-events: non…

LVS负载均衡集群之LVS-NAT集群

目录 一、什么是集群&#xff1f; 1.1、集群&#xff08;cluster&#xff09;的含义 1.2、问题 1.3解决方法 二、集群分类 2.1、负载均衡集群(Load Balance Cluster) 2.2、高可用集群(High Availability Cluster) 2.3、高性能运算集群 (High Performance Computer Clust…

企业服务器数据库被360后缀勒索病毒攻击后的正确处理方式

在数字化时代&#xff0c;企业服务器数据库的安全性至关重要。然而&#xff0c;即使采取了各种安全措施&#xff0c;仍然有可能遭受到360等后缀的勒索病毒网络攻击。近期&#xff0c;很多企业的云服务与物理服务器遭到了360后缀的勒索病毒攻击&#xff0c;导致企业内部数据库中…

能够ping通服务器的同时端口不通的排查方法

概述 当您在客户端访问目标服务器时&#xff0c;如果能ping通&#xff0c;但业务端口无法访问&#xff0c;您可以参见以下方法进行排查。 步骤一&#xff1a;实例安全组检查 1、登录ECS管理控制台&#xff0c;单击实例。 2、在顶部菜单栏左上角处&#xff0c;选择地域。 3、…

Visual Studio下2022Opencv的配置

Visual studio2022 opencv的配置 先从官网下载opencv &#xff1a; opencv releases 下载 ​ 我这里的开发环境是window版本&#xff0c;我们选择Windows版本进行下载 点开下载的文件&#xff0c;输入需要保存的路径 记住你保存的路径(我这里安装再F:) 安装需要时间静等安装…

修改Jeecg-boot context-path(附加图片+Nginx配置)

文章目录 需求描述解决方案前端后端Nginx 需求描述 前端框架采用的是ant design vue ,后端框架采用的是jeecg-boot,前端请求后端地址中包含jeecg-boot字样&#xff0c;想修改为其它的名字&#xff0c;修改方式如下 解决方案 前端 第一步 request.js文件路径&#xff1a;src…

2个好用的ftp和ssh工具推介

为什么不用xshell和xftp,是不好用吗&#xff1f;xshell和xftp虽然好用&#xff0c;而且也有免费版&#xff0c;但是&#xff0c;一个方面使用有限制&#xff0c;再就是你看见这个报错的弹窗烦不烦&#xff1f; 一、ssh工具-WindTerm WindTerm[1] 是一个基于 C 开发的开源终端模…