JQuery 基础知识学习(详尽版)2024.11.17
一、jQuery简介及使用详解
1.1 jQuery简介
写更少的代码,做更多的事;jQuery可以做:HTML 元素选取 , HTML 元素操作 ,CSS 操作 ,HTML 事件函数 ,JavaScript 特效和动画 ,HTML DOM 遍历和修改
1.2 jQuery的使用
jQuery就是一个封装了很多函数的js文件,并不会与其他的js文件发生冲突。可以直接到jQuery的官网下载jQuery脚本文件,然后放入本地服务器,并在网页中通过script 标签进行引入
① 第一种引入方式:直接路径引入
<head><script src="jquery-3.7.1.min.js"></script>
</head>
注意:
script标签的src属性中,要根据jQuery文件所在的目录引入,如果jQuery文件和当前的HTML文件放在同一个目录下,即可直接写jQuery的文件名;如果jQuery文件和HTML文件不在同一个目录下,我们可以使用相对路径和绝对路径的方式引入jQuery。
在HTML5中,script标签上可以不用添加 type="text/javascript" 属性,因为JavaScript是HTML5以及所有现代浏览器中的默认脚本语言。
jQuery官网地址: jQueryhttps://jquery.com/
打开官网,即可看到jQuery的下载按钮,点击进入下载页面。有两个版本的jQuery可以下载:Production version - 用于实际的网站中,是已经被精简和压缩过的jQuery文件。
Development version - 用于测试和开发中,是未压缩的jQuery文件,可以方便阅读源码。
.min.js 这是压缩的版本。
.js就是JavaScript的外部脚本文件。
② 第二种引入方式:使用第三方CDN
1.3查看jQuery版本
在浏览器中打开已经引用jQuery的网页,然后按F12
打开 开发者工具
,选择“Console”控制台,在控制台中输入以下命令:
$.fn.jquery
输入命令后按回车,即可显示当前jQuery的版本号。
二、jQuery简介及使用详解
在项目中引用jQuery
2.1基本语法
jQuery的核心方法,在jQuery中封装了一系列的方法。
核心方法: jquery();
简化格式: $(); $代替jQuery这个方法名。
$(参数):参数可以是选择器,还可以直接就是一个函数。
<script>$(selector).action();
</script>
说明:
-
工厂函数
$()
:将DOM对象转化为jQuery对象 -
选择器
selector
:获取需要操作的DOM 元素( 用法基本上和css一致 ) -
方法
action()
:jQuery中提供的方法,其中包括绑定事件处理的方法$
等同于jQuery
2.1 jQuery 的顶级对象 $
- $ 是 jQuery 的别称,在代码中可以使用 jQuery 代替 $,但一般为了方便,通常都直接使用 $ 。
- $ 是jQuery 的顶级对象, 相当于原生JavaScript中的 window。把元素利用$包装成jQuery对象,就可以调用jQuery 的方法。
2.2jQuery对象 & DOM对象
$("#title").html();
// 等同于
document.getELementById("title").innerHTML;
DOM对象和jQuery对象分别拥有一套独立的方法,不能混用,想混用,先转换:
- DOM对象转jQuery对象
DOM 对象转换为 jQuery 对象: $(DOM对象)
var a = document.getElementById("name"); // a是DOM对象
var b = $(a); // b是jQuery对象
- jQuery对象转DOM对象(两种方式)
$('div') [index] index 是索引号
$('div') .get(index) index 是索引号
var a = $("#name"); // a是jQuery对象
var b = jqObject.get(0); // b是DOM对象
2.2选择器
jQuery 选择器允许您对 HTML 元素组或单个元素进行操作。
jQuery 选择器基于元素的 id、类、类型、属性、属性值等"查找"(或选择)HTML 元素。 它基于已经存在的CSS选择器,除此之外,它还有一些自定义的选择器。
jQuery 中所有选择器都以美元符号开头:$()。
- 基本选择器包括标签选择器、类选择器、ID选择器、并集选择器、交集选择器和全局选择器
<html>
<head><title>jquery使用</title><script type="text/javascript" src="jquery/jquery-3.7.1.min.js"></script>
</head>
<body><p>中国</p><p>武汉</p><p class="jy">加油</p><p id="wan">祖国万岁</p><h3 class="jy">祖国万岁</h3><script>$("h3.jy").css("color","red"); // 交集选择器,既是h3标签,又拥有.jy的元素</script>
</body>
</html>
层次选择器
属性选择器
过滤选择器
2.3事件
事件注册
element.事件(function(){})$("div").click(function(){ 事件处理程序 })
其他事件和原生基本一致。
比如mouseover、mouseout、blur、focus、change、keydown、keyup、resize、scroll 等
鼠标事件
键盘事件
方法 | 描述 | 执行时机 |
---|---|---|
keydown() | 触发或将函数绑定到指定元素的keydown事件 | 按下按键时 |
keyup() | 触发或将函数绑定到指定元素的keyup事件 | 释放按键时 |
<input>
<h3></h3><script src="js/jquery-3.4.1.min.js"></script>
<script>$("input").keyup( function(){var str = $(this).val(); // 获取框中的值$("h3").text( str ); // 将h3元素中的文本内容更改为str} );
</script>
表单事件
方法 | 描述 | 执行时机 |
---|---|---|
focus() | 触发或将函数绑定到指定元素的focus事件 | 获得焦点 |
blur() | 触发或将函数绑定到指定元素的blur事件 | 失去焦点 |
<form action=""><p>帐号: <input id="a" value="请输入帐号..."> </p><p>电话: <input id="b"> </p>
</form><script src="js/jquery-3.4.1.min.js"></script>
<script>// 获得焦点(激活/点击一下)$("#a").focus(function(){$(this).val("");});// 失去焦点(未激活/未点击)$("#a").blur(function(){$(this).val("请输入帐号...");});
</script>
事件处理
事件处理 on() 动态绑定事件,对DOM元素绑定事件的另一种写法。
- 绑定一个事件
$(".del").on('click', function() {alert('hello');
})
- 绑定多个事件
$(".del").on('click mouseover', function() {alert('hello');
})
- events:一个或多个用空格分隔的事件类型,如"click"或"keydown" 。
- selector: 元素的子元素选择器 。
- fn:回调函数 即绑定在元素身上的侦听函数。
可以绑定多个事件,多个处理事件处理程序
$("div").on({mouseover: function(){}, mouseout: function(){},click: function(){}
});
如果事件处理程序相同
$("div").on("mouseover mouseout", function() {$(this).toggleClass("current");
});
可以事件委派操作 。事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素。
$('ul').on('click', 'li', function() {alert('hello world!');
});
动态创建的元素,click() 没有办法绑定事件, on() 可以给动态生成的元素绑定事件$("div").append($("<p>我是动态创建的p</p>"));$(“div").on("click",”p”, function(){alert("俺可以给动态生成的元素绑定事件")
});
事件处理 off() 解绑事件
off() 方法可以移除通过 on() 方法添加的事件处理程序。
$("p").off() // 解绑p元素所有事件处理程序$("p").off( "click") // 解绑p元素上面的点击事件 后面的 foo 是侦听函数名$("ul").off("click", "li"); // 解绑事件委托
如果有的事件只想触发一次, 可以使用 one() 来绑定事件。
自动触发事件 trigger()
有些事件希望自动触发, 比如轮播图自动播放功能跟点击右侧按钮一致。可以利用定时器自动触发右侧按钮点击事件,不必鼠标点击触发。
element.click() // 第一种简写形式element.trigger("type") // 第二种自动触发模式$("p").on("click", function () {alert("hi~");
});
$("p").trigger("click"); // 此时自动触发点击事件,不需要鼠标点击element.triggerHandler(type) // 第三种自动触发模式
triggerHandler模式不会触发元素的默认行为,这是和前面两种的区别。
事件对象
事件被触发,就会有事件对象的产生。
element.on(events,[selector],function(event) {})
阻止默认行为:event.preventDefault() 或者 return false
阻止冒泡: event.stopPropagation()
元素的隐藏和显示
改变元素的宽高(带动画效果)
show( speed )
:显示hide( speed )
:隐藏toggle( speed )
等价于show+hide : 显示的隐藏,隐藏的显示
可选的 speed 参数规定隐藏/显示的速度,可以取以下值:“slow”、“fast” 或毫秒
<style>div{width: 200px;height: 200px;background-color: black;}
</style>
<body><button id="btn1">显示</button><button id="btn2">隐藏</button><button id="btn3">切换</button><div></div><script src="js/jquery-3.4.1.min.js"></script><script>$("#btn2").click(function(){// fast:快速的// slow:缓慢的// 毫秒:自定义$("div").hide(2000); });$("#btn1").click(function(){$("div").show('slow');});$("#btn3").click(function(){$("div").toggle(1000);});</script>
</body>
2.4jQuery的方法
设置或获取元素固有属性值 prop()
- 获取属性语法
prop('属性')
- 1
- 设置属性语法
prop('属性', '属性值')
DOM和CSS的操作
属性函数
attr( "属性" )
获得元素的属性值attr( "属性" , "新值" )
修改元素的属性值attr( 样式参数 )
:样式参数可以写成json格式
<body><button id="btn1">点我试试</button><hr><img src="img/1.jpg" title="图片1" width="300"><script src="js/jquery-3.4.1.min.js"></script><script>$("#btn1").click(function(){$("img").attr("src","img/2.jpg");$("img").attr("title","高清无码");$("img").attr( {width:"200",height:"200"} );});</script>
</body>
val()
获得表单元素中的value值val("x")
修改表单元素中的value值
html()
获得元素中的内容(标签+文本)html("x")
修改元素中的内容(标签+文本)
text()
获得元素中的文本text("x")
修改元素中的文本
<button>试试</button>
<hr>
<input id="username"><div><h1><i>中国加油!</i></h1>
</div><script src="js/jquery-3.4.1.min.js"></script>
<script>$("button").click(function(){//alert($("input").val()); // input框中的值//$("input").val("哈哈哈"); // 修改input框中的值 //alert( $("div").html() ); // 获得div中的内容(包含标签信息)//alert( $("div").text() ); // 获得div中的内容(不包含标签信息,只包含文本内容)$("div").text("祖国万岁!"); // 修改div中的内容(全部内容都覆盖)});
</script>
样式函数
css("属性")
获得该属性值css("属性","值")
设置属性的值css( { json} )
设置多个属性的值
使用css()的方法可以设置和获取对象的样式。
css() 方法设置或返回被选元素的一个或多个样式属性。
<style>div{width: 150px;height: 150px;background-color: #000;}
</style>
<body><button>试试</button><hr><div></div><script src="js/jquery-3.4.1.min.js"></script><script>$("button").click(function(){//var w = $("div").css("width"); // 获取css属性,width的值//1.一个键值对//$("div").css("background-color","pink");//2.链式编程//$("div").css("background-color","pink").css("border-radius","50%");//3.json为参数$("div").css({opacity:"0.4",background:"orange",borderRadius:"50%"} );});</script>
</body>
width()
获得元素的宽度width( number )
修改元素的宽度height()
获得元素的高度height( number )
修改元素的高度
<style>div{width: 150px;height: 150px;background-color: #000;}
</style>
<body><button>试试</button><hr><div></div><script src="js/jquery-3.4.1.min.js"></script><script>$("button").click(function(){var w = $("div").width(); // (无参)获取宽度var h = $("div").height(); // (无参)获取高度// alert("宽:"+w+"px,高:"+h+"px");$("div").width("300"); // (传参)修改宽度$("div").height("300"); // (传参)修改高度});</script>
</body>
类样式函数
addClass()
为元素添加类样式removeClass()
将元素的类样式移除toggleClass()
样式的切换(有->无,无->有
<style>div{width: 100px;height: 100px;background-color: #000;} .a{background: palevioletred;border-radius: 50%;} .b{border:5px dashed darkcyan;opacity: 0.6;}.cn{background: #000;color:#FFF; font-family: 楷体;}
</style>
<body><button id="btn1">试试</button><button id="btn2">取消透明度</button><button id="btn3">样式切换</button><hr><div></div><h1>中华人民共和国,万岁!</h1><script src="js/jquery-3.4.1.min.js"></script><script>$("#btn1").click(function(){// $("div").addClass("a");$("div").addClass("a b");});$("#btn2").click(function(){$("div").removeClass("b");});$("#btn3").click(function(){$("h1").toggleClass("cn");});</script>
</body>
addClass( )
- 为jQuery对象添加一个或多个class
- 可以接收一个回调函数作为参数,
回调函数中有两个参数:1.当前元素的索引,2.当前元素的类名
在回调函数中this 就是当前的元素,但this是一个DOM对象,不能调用jQuery对象的方法
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>document</title><script src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.js"></script><style>.box1{width: 200px;height: 200px;background-color: #bfa;}.box2{border: 10px red solid;}.box3{background-color: orange;}</style><script>$(function(){// 为按钮绑定响应函数$("#btn").click(function(){// // 为box1添加class// // addClass()可以为元素添加一个或多个class// $(".box1").addClass(["box2","box3"])//可以使用数组的形式添加多个class// // 与"box2 box3"相同// // 具有隐式迭代的特点,可以为所有的box1类添加class// addClass可以接收一个回调函数作为参数$(".box1").addClass(function(index,className){// alert(index + "--" + className)// 在回调函数中this 就是当前的元素alert(this);//[object HTMLDivElement]// 说明this是一个DOM对象,不能调用jQuery对象的方法if(index % 2 == 0){// 添加box2// this.classList.add("box2") //this是一个DOM对象$(this).addClass("box2")//将this 转换为jQuery对象,可以调用jQuery对象的方法}else{// 添加box3// this.classList.add("box3")$(this).addClass("box3")}})})})</script>
</head>
<body> <button id="btn">点我一下</button><hr><div class="box1"></div><div class="box1"></div><div class="box1"></div></body>
addClass( )的回调函数的返回值会成为当前元素的class
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>document</title><script src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.js"></script><style>.box1{width: 200px;height: 200px;background-color: #bfa;}.box2{border: 10px red solid;}.box3{background-color: orange;}</style><script>$(function(){// 为按钮绑定响应函数$("#btn").click(function(){$(".box1").addClass(function(index){// 回调函数的返回值会成为当前元素的class// return ["box2","box3"]if(index % 2 == 0){return "box2"}else{return "box3"}})})})</script>
</head>
<body> <button id="btn">点我一下</button><hr><div class="box1"></div><div class="box1"></div><div class="box1"></div></body>
节点操作
- 创建节点
- 工厂函数
$()
用于获取或创建节点
- 工厂函数
- 插入节点
- 插入子节点
- 替换节点
replaceWith()
replaceAll()
- 复制节点
clone()
- 删除节点
remove()
删除整个节点empty()
清空节点内容
通过 jQuery,可以很容易地添加新元素/内容。
添加新的 HTML 内容四个 jQuery 方法:
append() - 在被选元素的结尾插入内容
prepend() - 在被选元素的开头插入内容
after() - 在被选元素之后插入内容
before() - 在被选元素之前插入内容
<input> <button id="test">测试</button><ul><li>三国演义</li><li>水浒传</li><li>西游记</li>
</ul><script src="js/jquery-3.4.1.min.js"></script>
<script>$("#test").click(function(){var bookname = $("input").val();var newli = $("<li>"+bookname+"</li>"); //通过工厂函数,创建新的li节点/*添加子节点*///$("ul").append(newli); // newli添加到ul后面//newli.appendTo("ul"); // newli添加到ul后面//$("ul").prepend(newli); // newli添加到ul前面//newli.prependTo("ul");/*添加同辈节点*///$("li:last").after( newli ); // newli添加到最后的li的后面//newli.insertAfter("li:last");//$("li:last").before(newli); //newli添加到最后的li的前面//newli.insertBefore("li:last");/*替换节点*///$("li:eq(1)").replaceWith(newli); // 将第二个li替换成newli//newli.replaceAll( "li:eq(1)" );/*复制节点*///$("li:first").clone().insertAfter("li:last"); // 复制第一个li,并插入到最后一个li的后面/*删除节点*///$("li:eq(1)").empty(); // 清空了节点上的文本(节点并没有消失)$("li:eq(1)").remove(); //删除节点});
</script>
实现动态表格
步骤:①创建一个表格
②编写数据
③在页面加载完成之后初始化表格
④将表单中的数据加到表格
⑤为每一行增加一个删除按钮
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style type="text/css">.c1 {background-color: #00FFFF;}.c2 {background-color: burlywood;}thead {background-color: fuchsia;}</style><script src="js/jquery-3.5.1.js" type="text/javascript" charset="utf-8"></script><script>let stuArr = [{'sid': 1,'sname': '残念','ssex': '1','sscore': 60},{'sid': 2,'sname': '白茶','ssex': '0','sscore': 90},{'sid': 3,'sname': '八碗','ssex': '1','sscore': 100}];$(function(){$("#btnAdd").click(function(){let trObj = $("<tr></tr>");let sidTd = $("<td></td>").html($("#sid").val());let snameTd = $("<td></td>").html($("#sname").val());let ssexTd = $("<td></td>").html($(".radioCls:checked").val());let sscoreTd = $("<td></td>").html($("#sscore").val());let delTd = $("<td></td>");let delBtn = $("<input>").attr("type","button").val("删除");delTd.append(delBtn);trObj.append(sidTd).append(snameTd).append(ssexTd).append(sscoreTd).append(delTd);$("#tabData").append(trObj);delBtn.click(function(){if(confirm("是否删除"+$(this).parent().parent().find("td:eq(1)").text()+"?")){$(this).parent().parent().remove();$("#tabData tr").removeClass("c1");$("#tabData tr").removeClass("c2");$("#tabData tr:even").addClass("c1");$("#tabData tr:odd").addClass("c2");}});$("#tabData tr:even").addClass("c1");$("#tabData tr:odd").addClass("c2");});$.each(stuArr,function(i,jsonObj){//在jQuery中如何创建一个tr标签对象let trObj = $("<tr>");let sidTd = $("<td>").html(jsonObj.sid);let snameTd = $("<td>").html(jsonObj.sname);let ssexTd = $("<td>").html(jsonObj.ssex);let sscoreTd = $("<td>").html(jsonObj.sscore);let delTd = $("<td></td>");let delBtn = $("<input/>").attr("type","button").val("删除");delTd.append(delBtn);trObj.append(sidTd).append(snameTd).append(ssexTd).append(sscoreTd).append(delTd);$("#tabData").append(trObj);delBtn.click(function(){if(confirm("是否删除"+$(this).parent().parent().find("td:eq(1)").text()+"?")){$(this).parent().parent().remove();$("#tabData tr").removeClass("c1");$("#tabData tr").removeClass("c2");$("#tabData tr:even").addClass("c1");$("#tabData tr:odd").addClass("c2");}});});$("#tabData tr:even").addClass("c1");$("#tabData tr:odd").addClass("c2");})</script></head><body><table width="60%" border="1px" cellpadding="3px" cellspacing="0px"><thead><tr><th>编号</th><th>姓名</th><th>性别</th><th>积分</th><th>删除</th></tr></thead><tbody id="tabData"></tbody></table><hr><form>编号:<input type="text" name="sid" id="sid" value="" /><br>姓名:<input type="text" name="sname" id="sname" value="" /><br>性别:<input type="radio" name="ssex" value="1" id="ssex" />男 <input type="radio" name="ssex" value="0" id="ssex" />女<br>积分:<input type="text" name="sscore" id="sscore" value="" /><br><input type="button" id="btnAdd" name="btnAdd" value="保存" /></form></body>
</html>
遍历节点
祖先元素
用于向上遍历 DOM 树
parent()
返回被选元素的直接父元素,仅上一级parents()
返回被选元素的所有祖先元素,它一路向上直到文档的根元素,可以选择辈分
<p><button>测试</button></p>
<ul><li>a</li><li><b>b</b></li><li>c</li>
</ul><script src="js/jquery-3.4.1.min.js"></script>
<script>$("button").click(function(){//var x = $("b").parent().html(); // 找爸爸//var x = $("b").parents("ul").html(); // 找祖宗 ul//var x = $("b").parents("body").html(); // 找祖宗 bodyalert( x );});
</script>
同辈元素
next()
获取紧邻匹配元素之后的元素prev()
获取紧邻匹配元素之前的元素siblings( [selector] )
获取位于匹配元素前面和后面的所有同辈元素
<button>测试</button>
<p>p1</p>
<ul><li>a</li><li><b>b</b></li><li>c</li>
</ul>
<p>p2</p>
<p id="x">p3</p><script src="js/jquery-3.4.1.min.js"></script>
<script>$("button").click(function(){//var x = $("ul").next().text(); // 紧邻的下一个元素//var x = $("ul").prev().text(); // 紧邻的上一个元素//var x = $("ul").siblings("#x").text(); // 所有的兄弟中,id=x的var arr = $("ul").siblings(); // ul的所有兄弟,1个button,3个p,2个scriptfor(var i = 0 ;i< arr.length ;i++){alert(arr[i]);}});
</script>
后代元素
children( [selector] )
方法返回被选元素的所有直接子元素
<button>测试</button>
<ul><li>盘古</li><li>蚩尤</li><li>刑天<p>共工</p></li><h3>祝融</h3>
</ul><script src="js/jquery-3.4.1.min.js"></script>
<script>$("button").click(function(){//var x = $("ul").find("p").text(); // 在ul中查找p元素,忽略层级//var x = $("ul").find("h3").text(); // 在ul中查找h3元素,忽略层级var x = $("ul").find().text(); // find()没有传参,返回空值alert(x);});
</script>
元素的过滤
first()
:过滤第一个元素last()
:过滤最后一个元素eq(index)
:过滤到下标为index的元素not()
:除了什么之外的元素is()
:返回布尔,判断是不是这种元素
<button>测试</button>
<ul><li>盘古</li><li>蚩尤</li><li>刑天</li>
</ul><script src="js/jquery-3.4.1.min.js"></script>
<script>$("button").click(function(){//var x = $("li").first().text(); // 第一个li//var x = $("li").last().text(); // 最后一个li//var x = $("li").eq(1).text(); // 下标为1的li//var x = $("li").not("li:eq(1)").text(); // 除了下标为1的其余所有livar x = $("li").parent().is("ul"); // 返回布尔型,li的父节点是不是ulalert(x);});
</script>
jQuery对象复制
clone( ) 用来复制jQuery对象
- 只会复制元素本身,不会复制元素的事件
- 在clone( )中传入一个参数true,表示不仅复制元素本身,还包括其事件、数据等
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>document</title><script src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.js"></script><script>/* 点击按钮,使得孙悟空添加到 list2 中*/$(function(){$("#list li:nth-child(1)").click(function(){alert("孙悟空")})// clone( )用来复制jQuery对象// var $swk = $("#list li:nth-child(1)").clone()// 只会复制元素本身,不会复制元素的事件,所以在list2中添加的孙悟空不会有点击出现“孙悟空"的事件var $swk = $("#list li:nth-child(1)").clone(true)// 在clone()中传入一个参数true,表示不仅复制元素本身,还包括其事件、数据等var $list2 = $("#list2")$("#btn").click(function(){$list2.append($swk)})})</script>
</head>
<body> <button id="btn">点我</button><hr><ul id="list"><li>孙悟空</li><li>猪八戒</li></ul><ul id="list2"><li>沙和尚</li><li>唐僧</li></ul>
</body>
jQuery中封装的Ajax的使用详解
1.第一种:
$.ajax()
$.ajax() 是 jQuery 中 AJAX 请求的核心方法,所有的其他方法都是在内部使用此方法。
语法:
$.ajax( { name:value, name:value, ... } )
$.ajax({ 参数1,参数2···})
$.ajax({type:“请求方式”,url:“请求地址”,data:“请求参数”,dataType:"服务器返回的数据类型"success:fundction(data){ //成功且完整响应自动调用的函数},error: function(){ //出现错误自动调用的函数}
})
dataType:用来指定服务器返回来的数据类型,可选值有如下:
xml:表示服务器返回的是xml内容
html:表示服务器返回的是html文本内容
script:表示服务器返回的是script文本内容
json:表示服务器返回的是json内容(重点)
jsonp:表示使用jsonp形式调用函数,早期我们用它来解决跨域问题
text:表示服务器返回的是纯文本字符串
(如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递)
说明:对于json和jsonp的区别,本小白暂时没有深入了解,目前只知道jsonp可以跨域读取数据,有待进一步学习~
async 异步方式,默认为true,即异步方式。当设置为false时,为同步方式。
- 异步方式:ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发ajax里的success方法,这时候执行的是两个线程。
- 同步方式:在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
<html>
<head><title>Title</title><script type="text/javascript" src="js/jquery-3.3.1.min.js"></script><script>function doAjax(){$.ajax({url:"bmiAjax",type:"POST",data:"name="+$("#name").val()+"&height="+$("#height").val()+"&weight="+$("#weight").val(),success:function (data) {alert(data);//这个是响应服务器的处理结果$("#result").text(data);},error:function () {alert("error!!!");},dataType:"json"})}</script>
</head>
<body>姓名: <input type="text"id="name" name="name"/><br/>体重(kg)<input type="text" id="weight" name="weight"/><br/>身高(米)<input type="text" id="height" name="height"/><br/><input type="button" value="计算BMI"onclick="doAjax()"><div id="result"></div>
</body>
</html>
实例1
实现在页面上输入一个地址,点击获取经纬度,弹出该地址的经纬度。
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script type="text/javascript">function showAdress(){var str = document.getElementById("text").value; $.ajax({url: "https://restapi.amap.com/v3/geocode/geo",dataType: "json",type: "get",data: { address: str, key: "7486e10d3ca83a934438176cf941df0c", },success:function(res){alert(res.geocodes[0].formatted_address+"经纬度:"+res.geocodes[0].location);console.log(res); //在console中查看数据},error:function(){alert('failed!');},});}
</script>
html部分
<div><form name="form"><span>输入地址:</span><input id="text" class="textbox" type="text"/><input class="button" type="button" value="获取经纬度" onclick="showAdress()"/></form>
</div>
实例2
将http://hebutgo.com:8080/maps/getMapsList接口中的result字段绘制成表格。
打印之前,先让我们看看这个接口中的result是什么?
data.json
{"result":[{"申请人省份":"0","counts":1553},{"申请人省份":"上海市","counts":637},{"申请人省份":"云南省","counts":81},{"申请人省份":"内蒙古自治区","counts":52},{"申请人省份":"北京市","counts":1186},{"申请人省份":"吉林省","counts":90},{"申请人省份":"四川省","counts":443},{"申请人省份":"天津市","counts":249},{"申请人省份":"宁夏回族自治区","counts":15},{"申请人省份":"安徽省","counts":1633},{"申请人省份":"山东省","counts":780},{"申请人省份":"山西省","counts":60},{"申请人省份":"广东省","counts":1575},{"申请人省份":"广西壮族自治区","counts":367},{"申请人省份":"新疆维吾尔自治区","counts":48},{"申请人省份":"江苏省","counts":1889},{"申请人省份":"江西省","counts":90},{"申请人省份":"河北省","counts":164},{"申请人省份":"河南省","counts":261},{"申请人省份":"浙江省","counts":905},{"申请人省份":"海南省","counts":20},{"申请人省份":"湖北省","counts":439},{"申请人省份":"湖南省","counts":211},{"申请人省份":"甘肃省","counts":71},{"申请人省份":"福建省","counts":277},{"申请人省份":"西藏自治区","counts":5},{"申请人省份":"贵州省","counts":108},{"申请人省份":"辽宁省","counts":199},{"申请人省份":"重庆市","counts":193},{"申请人省份":"陕西省","counts":270},{"申请人省份":"青海省","counts":15},{"申请人省份":"香港","counts":1},{"申请人省份":"黑龙江省","counts":215},],"reason":"","status":"success"}
分析
1.可以看到,接口中有三个数据,result数组、reason、status,由于三项数据共同构成了我们要请求的json,所以为get请求,data为默认即可,result数组通过data.result得到。
2.为了将result数组中的数据以表格形式打印,使用$.each(data.result,function(index,obj){}) 方法实现依次读取。
ps:
- 此处的data.result是本例中的目标数组,each方法使用时此处填入所要遍历的数组即可;
- index表示的是数组的下标(从0开始累加),即当前遍历到了该数组的哪个位置,如果不需要输出所读取的数组元素下标的话,这个下标值的命名随意,因为函数中无需使用;
- 如果data.result数组中的元素也为一个json 如{“申请人省份”:“上海市”,“counts”:637}(本例中),此时obj表示的是就是这个数组,可以通过obj[‘申请人省份’]、obj[‘counts’]等读取json中的元素。
代码
js部分
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script><script type="text/javascript">function printtable(){$.ajax({url:'http://hebutgo.com:8080/maps/getMapsList',type:'get',datatype:'json',success:function(res){console.log(res); //在console中查看数据$.each(res.result,function(index,obj){$("#table").append( "<tr><td>"+obj['申请人省份']+"</td>"+"<td>"+obj['counts']+"</td><tr>");});}})}</script>
html部分
<div class="main"><table id="table"><tr><th>申请人省份</th><th>数量</th></tr></table><input type="button" value="PRINT" onclick="printtable()"/>
</div>
<style type="text/css">.main{width: 500px;margin:0 auto;text-align: center;}#table{display: inline-block;vertical-align: top;border-collapse:collapse;}tr td{width:200px;border: 1px solid gray;}
</style>
$.ajax({url: 'https://api.example.com/data', // 请求的 URLtype: 'GET', // 请求方法:GET、POST 等dataType: 'json', // 预期服务器返回的数据类型success: function(data, textStatus, jqXHR) {// 请求成功时的回调函数console.log("成功获取数据: ", data);},error: function(jqXHR, textStatus, errorThrown) {// 请求失败时的回调函数console.log("请求失败: ", textStatus, errorThrown);}
});
在这个例子中,我们发送一个 GET 请求到指定的 URL,并期望服务器返回 JSON 格式的数据。如果请求成功,success
回调函数将被触发,并接收返回的数据作为参数。如果请求失败,error
回调函数将被触发,并接收关于错误的信息。
<script type="text/javascript">function login1(){$.ajax({//${pageContext.request.contextPath}用于取后端方法的绝对路径的项目名url: "${pageContext.request.contextPath}/user/returnJson",type: "GET",data:'{name: 'James'}', //必须是字符串格式contentType:"application/json", //指定内容格式dataType:json,success: function(daa) { //括号里的daa是服务器返回的数据console.log(daa);document.getElementById("myDiv").innerText=daa["name"];}});}</script>
2.第二种:
-
$.get(“请求地址”,“请求参数”,回调函数, 返回的数据类型)
(请求参数以形式js对象形式传入,可以避免不必要的字符拼接形式传入数据的麻烦)
<head>
<script>
function f1(fid) {if(confirm("是否删除?")){$.get("DeleteServlet",{id:fid},function (data) {console.log(data);if ("ok"=== data){$("#suc").slideUp(3000);setTimeout(function () {$("#suc").slideDown(2000);},2000);setTimeout(function () {location.href="show.html";},7000);}else{alert("删除失败")}},"text")}}</script>
</head>
<body>
<!-- 让a标签失去跳转功能,点击触发事件f1(fid)里面并传入参数 -->
<a href=\"javascript:void(0)\" onclick='f1("+e.fid+")'>删除</a>
</body>
<script>function doAjax(){$.get("bmiAjax",{name:"ycy",height:1.75,weight:58},function (data) {alert(data);},"json")}
</script>
$.get('https://api.example.com/users', function(data) {// 在这里处理返回的数据console.log(data);// 假设 data 是一个用户列表的数组,我们可以遍历它$.each(data, function(index, user) {console.log('用户ID:', user.id);console.log('用户名:', user.username);});
});
向 https://api.example.com/users
发送了一个 GET 请求,并在请求成功时调用了一个匿名函数来处理返回的数据。我们假设服务器返回的是一个 JSON 格式的用户列表,因此我们可以在回调函数中遍历这个列表并打印出每个用户的 ID 和用户名。
如果你需要向服务器发送额外的数据,你可以将数据作为第二个参数传递给 $.get()
方法。例如:
$.get('https://api.example.com/users', { id: 123 }, function(data) {console.log(data); // 处理返回的用户数据
});
我们向服务器发送了一个包含 id: 123
的 GET 请求,以获取具有特定 ID 的用户的信息。
$.get()
方法提供了简化的 Ajax GET 请求功能,但在处理复杂的请求或需要更多配置选项时,使用 $.ajax()
方法可能更为合适。此外,对于涉及敏感数据的请求,务必确保使用 HTTPS 来保护数据的传输安全。
-
$.post(“请求地址”,“请求参数”,回调函数, 返回的数据类型)
1.若不涉及文件上传,要拿表单中的数据可以直接将表单序列化
$("#form1").serialize()
可以把表单的所有参数都获取到,并以name=value&age=value2的形式拼接起来
$("#form1").serialize()需要都哪个表单绑定起来。
<script>$("#btn").click(function(){alter($("form1").serialize());
})
</script>
<head><meta charset="UTF-8"><title>登录页面</title><!--要求:1.登录成功跳转展示所有数据页面2.登录失败显示登录失败信息--><script src="jquery.js"></script><script>function f() {var formS = $("form").serialize();// console.log(formS);$.ajax({type:"post",url:"LoginServlet",data:formS ,dataType:"text",success:function (data) {console.log(data);if ("ok"==data){location.href="show.html";}else{$("#sp").text("登录失败");}},error:function (e) {console.log(e);}})}</script>
</head>
<body>
<h3 align="center">登录页面</h3>
<hr>
<form><table align="center"><tr><td>用户名</td><td><input type="text" name="uname"></td></tr><tr><td>密码</td><td><input type="password" name="pwd"></td></tr><tr><td colspan="2" style="text-align: center"><span id="sp"></span></td></tr><tr align="center"><td colspan="2"><input type="button" value="登录" onclick="f()"></td></tr></table>
</form>
</body>
$.post('https://api.example.com/login', {username: 'myusername',password: 'mypassword'
}, function(response) {// 在这里处理返回的数据console.log(response);if (response.success) {alert('登录成功!');} else {alert('登录失败:' + response.message);}
}, 'json');
我们向 https://api.example.com/login 发送了一个 POST 请求,包含了用户名和密码数据。我们指定了预期返回的数据类型为 JSON,并在请求成功时调用了一个匿名函数来处理返回的数据。在回调函数中,我们检查了返回的响应对象,根据 success 属性显示相应的提示信息。
使用 POST 请求发送敏感数据时(如用户名和密码),务必确保通过 HTTPS 进行通信,以保护数据的传输安全。此外,对于涉及用户输入的数据,应该进行适当的验证和清理,以防止潜在的安全漏洞,如 SQL 注入或跨站脚本攻击(XSS)。
2.涉及文件上传的form表单,必须发post请求;后端还是要@MultipartConfig,且需要做如下操作:
- 将表单数据化(里面要一个DOM对象)
- 将 contentType:false,processData:false,
<head>
<script src=juqery.js></script>
<script>function alter() {var formData = new FormData($("form")[0]);$.ajax({type:"post",url:"AlterServlet",data:formData,contentType:false,processData:false,dataType:"text",success:function (data) {console.log(data);if ("ok" === data){location.href="show.html";}else {alert("修改失败");}}})}</script>
</head>
<body>
<h2 align="center" style="color: black">修改花的信息</h2>
<hr>
<form><table align="center"><tr><td>编号</td><td><input type="text" name="fid" readonly ></td></tr><tr><td>名称</td><td><input type="text" name="fname" ></td></tr><tr><td>价格</td><td><input type="text" name="price" ></td></tr><tr><td>产地</td><td><input type="text" name="made_in" ></td></tr><tr><td>描述</td><td><input type="text" name="describe" ></td></tr><tr><td>图片</td><td><input type="file" name="photo"></td></tr><tr><td colspan="2" style="text-align: center"><input type="button" value="修改" onclick="alter()"></td></tr></table>
</form>
</body>
回调函数主要是用来处理服务器对我们的响应结果。
返回的数据类型这个参数用来设置服务器返回来的数据类型,可以是xml, html, script, json, text。
3.第三种:
-
$.getJSON("请求地址", "请求参数", "回调函数")
通过HTTP GET请求,请求载入JSON数据,请求方式和回调数据类型是固定的($.get()和$.post()都是四个参数而这个只要三个参数即可 ),请求方式是GET,数据返回是JSON格式;
用该方法记得写<thead> <tbody>, i代表循环中对象的索引,e代表循环中拿出的对象,data用于接收后端响应回来的数据
$(function () {$.getJSON("QueryServlet",function (data) {$(data).each(function (i,e) {console.log(e);var $1 = $("<tr align=\"center\">\n" +" <td>"+e.fid+"</td>\n" +" <td>"+e.fname+"</td>\n" +" <td>"+e.price+"</td>\n" +" <td>"+e.made_in+"</td>\n" +" <td>"+e.describe+"</td>\n" +" <td><img src=\"upload/"+e.photo+"\" alt=\"\"></td>\n" +" <td>\n" +" <a href=\"javascript:void(0)\" onclick='f1("+e.fid+")'>删除</a>\n" +" <a href=\"updata.html?fid="+e.fid+"\">变更</a>\n" +" </td>\n" +" </tr>");$("tbody").append($1);$1.mouseover(function () {$(this).css("background-color","palevioletred")});$1.mouseout(function () {$(this).css("background-color","white")})});});});
这种方式要求服务器返回的数据类型得是json格式的。
<script>function doAjax(){$.getJSON("bmiAjax",{name:"ycy",height:1.75,weight:58},function (data) {alert(data);})}
</script>
4.第四种:
这种方式是发送ajax请求获取一个js文件。
-
$.getScript("请求地址", "回调函数")
5. 注意
a标签这种跳转的,同时需要把数据传过去的:直接后面拼接数据
<a href="login.html?id=1&password=123">跳转</a>
四、jQuery load() 方法
jQuery 的 load()
方法是一个简单而强大的 Ajax 函数,用于从服务器加载数据,并把返回的数据放入被选元素中。这个方法通常用于将 HTML 片段加载到指定的元素中,而无需使用 $.ajax()
或其他更复杂的 Ajax 方法。
以下是 load()
方法的基本语法
$(selector).load(URL, [data], [callback]);
selector: 一个 jQuery 选择器,指定要加载数据的元素。
URL: 要请求的 URL。
data (可选): 发送到服务器的数据,以键值对的形式表示。这通常是一个对象或查询字符串。
callback (可选): 请求完成时的回调函数。这个函数接收返回的 HTML 内容作为参数。
面是一个简单的例子,展示如何使用 load()
方法将一个页面的内容加载到一个 <div>
元素中:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>jQuery load() 示例</title><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body><button id="load-button">加载内容</button>
<div id="content"></div><script>
$(document).ready(function() {$('#load-button').click(function() {$('#content').load('content.html');});
});
</script></body>
</html>
在这个例子中,当用户点击 “加载内容” 按钮时,load() 方法会向 content.html 发送一个 GET 请求,并将返回的 HTML 内容加载到 ID 为 content 的 <div> 元素中。
如果你需要向服务器发送额外的数据,你可以传递一个对象作为 data 参数:
$('#content').load('content.php', { param1: 'value1', param2: 'value2' });
在这个例子中,content.php
会接收到 param1
和 param2
这两个参数,并可以根据这些参数返回不同的内容。
此外,你还可以提供一个回调函数来处理加载完成后的逻辑:
$('#content').load('content.html', function(response, status, xhr) {if (status == "error") {var msg = "抱歉,无法加载内容: ";$(this).html(msg + xhr.status + " " + xhr.statusText);}
});
在这个回调函数中,response 参数包含请求返回的内容,status 参数包含请求的状态(“success”, “error”, “notmodified”, “timeout”, 或 “abort”),而 xhr 参数包含 XMLHttpRequest 对象,你可以用它来获取更多关于请求的信息。
oad()
方法默认使用 GET 请求来加载数据。如果你需要发送 POST 请求或其他类型的请求,你可能需要使用 $.ajax()
方法,因为它提供了更多的配置选项。此外,对于安全性敏感的数据传输,确保使用 HTTPS。
iframe标签模仿实现Ajax效果
AJAX 可以用于创建快速动态的网页。
AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
编写一个 ajax-frame.html浏览器打开
<!DOCTYPE html>
<html>
<head lang="en"><meta charset="UTF-8"><title>kuangshen</title>
</head>
<body><script type="text/javascript">function LoadPage(){var targetUrl = document.getElementById('url').value;console.log(targetUrl);document.getElementById("iframePosition").src = targetUrl;}</script><div><p>请输入要加载的地址:</p><p><input id="url" type="text" value="https://www.bilibili.com/"/><input type="button" value="提交" onclick="LoadPage()"></p>
</div><div><h3>加载页面位置:</h3><iframe id="iframePosition" style="width: 100%;height: 500px;"></iframe>
</div></body>
</html>
~~~~~~~~~~~~~~~~
入口函数,表示页面输载入事件:ready(函数)
$(document).ready(function(){... // 此处是页面DOM加载完成的入口
});$(function () { ... // 此处是页面 DOM 加载完成的入口 -- 推荐
}) ;
<script type="text/javascript">
$(document).ready(function(){alert("msg");
});
</script>
//简化版<script type="text/javascript">
$(function(){
alert("msg");
});
</script>
jQuery 元素操作
1 遍历元素
$("div").each(function (index, domEle) { xxx; })1. each() 方法遍历匹配的每一个元素。主要用DOM处理。 each 每一个
2. 里面的回调函数有2个参数: index 是每个元素的索引号; demEle 是每个DOM元素对象,不是jquery对象
3. 所以要想使用jquery方法,需要给这个dom元素转换为jquery对象 $(domEle)
$.each(object, function (index, element) { xxx; })1. $.each()方法可用于遍历任何对象。主要用于数据处理,比如数组,对象
2. 里面的函数有2个参数: index 是每个元素的索引号; element 遍历内容
2 创建元素
$('<li></li>');
jQuery核心函数
引入jQuery库,其实就是向网页中添加了一个新的函数$(jQuery)
- $ 是jQuery中的核心函数,jQuery的所有功能都是通过该函数来进行的
- 核心函数的功能(两种作用)
1. 将它作为对象使用,此时是一个工具类
- 在核心函数中jQuery为我们提供了多个工具方法
jQuery.isArray( ) 检查是不是数组
jQuery.isFunction( ) 检查是不是函数
jQuery.isNumeric( ) 检查是不是数值
2. 将它作为函数调用,根据不同参数的不同可以发挥不同的作用
jQuery( 函数 ) 将一个函数作为$的参数
- 这个函数会在文档加载完毕之后执行
- 相当于document.addEventListener("DOMContentLoaded",function(){ })
jQuery( 选择器 ) 将选择器字符串作为参数
- jQuery 自动去网页中查找元素
- 作用类似于 document.querySelectorAll( "...")
- 注意:通过jQuery核心函数查询的结果并不是原生的DOM对象,
而是一个经过jQuery包装过的新的对象,这个对象我们称其为jQUery对象 jQuery对象不能直接调用原生DOM对象的方法,
通常我们为jQuery对象命名时,会使用$开头(为了区分 $对象和DOM原生对象)
jQuery( DOM对象) 将DOM对象作为参数
- 可以将DOM对象转换为jQuery对象,从而使用jQuery对象的方法
jQuery( HTML代码 ) 将HTML代码作为参数
- 会根据html 代码来创建元素
注意:在jQuery中我们设置变量时,使用var ,因为一般使用jQuery说明比较旧的项目,考虑兼容性,同时也尽量避免使用箭头函数
1. 将jQuey作为对象(工具类)调用的例子
<script src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.js"></script><script>console.log(jQuery === $);//truefunction fn(){}var num = 10// jQuery.isFunction( ) 检查是不是函数console.log($.isFunction(num));//falseconsole.log($.isFunction(fn));//true// 可以使用typeof检查类型console.log(typeof fn === "function");//true</script>
2. 将其作为函数调用的例子
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>document</title><script src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.js"></script><script>// 将一个函数作为$的参数// $(function(){// alert("核心函数~~")// })// alert("核心函数外~~")// 将选择器字符串作为参数$(function(){// 通过jQuery核心函数查询的结果可以直接调用click,因为其是jQUery对象 $("#btn01").click(function(){// alert("你点我干嘛")var btn = document.getElementById("btn01")// 所以为了区分 jQUery对象和DOM原生对象,// 我们一般为 jQUery对象 命名时,会为其加上一个$ var $btn2 = $("#btn01")// 将DOM对象作为参数传进去,可以将DOM对象转换为jQuery对象alert($(btn))//[object Object]alert(btn);//[object HTMLButtonElement]alert($btn2);//[object Object]var $h1 = $("<h1>我是一个标题</h1>")//会根据html代码创建元素alert($h1)//[object Object],是一个jQuery对象$("div").append($h1)//把创建的h1加入到div中})}) </script>
</head>
<body> <div></div><button id="btn01" type="button">点我一下</button>
</body>
四、jQuery对象
jQuery对象
- 通过jQuery核心函数获得到的对象就是jQuery对象
- jQuery对象是jQuery中定义的对象,可以将其理解为DOM对象的升级
在jQuery对象中为我们提供了很多简单易用的方法来帮助我们简化DOM操作
- jQuery对象本质上是一个DOM对象的数组(类数组)
可以通过索引获取jQuery 对象中的DOM对象,注意获取的是DOM对象
- 当我们修改jQuery对象,它会自动修改jQuery对象中的所有元素
这一特点称为jQuery的隐式迭代
- 通常情况下,jQuery对象的方法的返回值依然是一个jQuery对象
所以我们可以调用一个方法后继续调用其他的jQuery对象的方法
这一特性称为jQuery对象的 链式调用
相关文章:
JQuery 基础知识学习(详尽版)2024.11.17
一、jQuery简介及使用详解 1.1 jQuery简介 写更少的代码,做更多的事;jQuery可以做:HTML 元素选取 , HTML 元素操作 ,CSS 操作 ,HTML 事件函数 ,JavaScript 特效和动画 ,HTML DOM 遍…...
Spring Validation参数校验
Validation Validation是Spring提供的一个参数校验框架,使用预定义的注解完成参数校验 使用步骤 引入Spring Validation起步依赖在需要校验的参数所在的类上添加Validated注解在需要校验的参数前面加上Pattern注解 <!--参数校验依赖--><dependency>&l…...
高斯数据库Postgresql死锁和锁表解决方法
解决死锁进方法: 查询死锁进程列表 select * from pg_stat_activity where waiting‘t’ 发现有好几条挂起的记录,记录下所有或需要解锁的pid 解决死锁进程 select pg_cancel_backend(‘pid值’) 解决完后,刷新后测试,恢复正…...
【设计模式】模板方法模式 在java中的应用
设计模式: 设计模式是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由Erich Gamma等人在1995年的书《设计模式:可复用面向对象软件的基础》中首次引入的。设计模式可以加快开发过程&#x…...
PVE纵览-安装系统卡“Loading Driver”的快速解决方案
PVE纵览-安装系统卡“Loading Driver”的快速解决方案 文章目录 PVE纵览-安装系统卡“Loading Driver”的快速解决方案摘要通过引导参数解决PVE安装卡在“Loading Driver”问题官方解决方法 关键字: PVE、 显卡、 Loading、 Driver、 nomodeset 摘要 在虚拟机…...
Lua资料
Lua脚本语言 cheet sheet Lua & c Lua与C API交互全面解析 Lua语言:和C语言的交互 Lua进阶用法之Lua和C的接口设计 Lua C API 简介 C和Lua之间的相互调用 深入Lua:用户数据userdata 基本数据类型 之 UserData calling-lua-from-c/ Embedding Lua i…...
【C语言】值传递和地址传递
值传递 引用传递(传地址,传引用)的区别 传值,是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值。 传地址,是传值的一种特殊方式,只是他传递的是地址,不是普通…...
PyTorch 中使用自动求导计算梯度
使用 PyTorch 进行自动求导和梯度计算 在 PyTorch 中,张量的 requires_grad 属性决定了是否需要计算该张量的梯度。设置为 True 的张量会在计算过程中记录操作,以便在调用 .backward() 方法时自动计算梯度。通过构建计算图,PyTorch 能够有效…...
Oracle Instant Client 23.5安装配置完整教程
Oracle Instant Client 23.5安装配置完整教程 简介环境要求安装步骤1. 准备工作目录2. 下载Oracle Instant Client3. 解压Instant Client4. 安装依赖包5. 配置系统环境5.1 配置库文件路径5.2 配置环境变量 6. 配置Oracle钱包(可选) 验证安装常见问题解决…...
【jvm】方法区的理解
目录 1. 说明2. 方法区的演进3. 内部结构4. 作用5.内存管理 1. 说明 1.方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等数据。它是各个线程共享的内存区域。2.尽管《Java虚拟机规范》中把方法区描述为堆的一个逻辑部分,但它却…...
ES-针对某个字段去重后-获取某个字段值的所有值
针对上面表的数据,现在想根据age分组,并获取每个分组后的name有哪些(去重后)。 select age, GROUP_CONCAT(DISTINCT(name)) from testtable group by age ; 结果: 如果想要增加排序: SELECT age, GROUP_CONCAT(DISTINCT name)…...
百度 2025届秋招提前批 文心一言大模型算法工程师
文章目录 个人情况一面/技术面 1h二面/技术面 1h三面/技术面 40min 个人情况 先说一下个人情况: 学校情况:211本中9硕,本硕学校都一般,本硕都是计算机科班,但研究方向并不是NLP,而是图表示学习论文情况&a…...
sglang 部署Qwen2VL7B,大模型部署,速度测试,深度学习
sglang 项目github仓库: https://github.com/sgl-project/sglang 项目说明书: https://sgl-project.github.io/start/install.html 资讯: https://github.com/sgl-project/sgl-learning-materials?tabreadme-ov-file#the-first-sglang…...
fastadmin操作数据库字段为json、查询遍历each、多级下拉、union、php密码设置、common常用函数的使用小技巧
数据库中遇到的操作 查询字段是json的某个值 //获取数据库中某个字段是json中得某个值,进行查询,goods是表中字段,brand_id是json中要查詢的字段。//数据类型一定要对应要不然查询不出来。$map[json_extract(goods, "$.brand_id")]…...
UniApp在Vue3的setup语法糖下自定义组件插槽详解
UniApp在 Vue3的 setup 语法糖下自定义组件插槽详解 UniApp 是一个基于 Vue.js 的跨平台开发框架,可以用来开发微信小程序、H5、App 等多种平台的应用。Vue 3 引入了 <script setup> 语法糖,使得组件的编写更加简洁和直观。本文将详细介绍如何在 …...
springboot上传下载文件
RequestMapping(“bigJson”) RestController Slf4j public class TestBigJsonController { Resource private BigjsonService bigjsonService;PostMapping("uploadJsonFile") public ResponseResult<Long> uploadJsonFile(RequestParam("file")Mul…...
Python学习从0到1 day29 Python 高阶技巧 ⑦ 正则表达式
目录 一、正则表达式 二、正则表达式的三个基础方法 1.match 从头匹配 2.search(匹配规则,被匹配字符串) 3.findall(匹配规则,被匹配字符串) 三、元字符匹配 单字符匹配: 注: 示例&a…...
机器学习-web scraping
Web Scraping,通常称为网络抓取或数据抓取,是一种通过自动化程序从网页中提取数据的技术。以下是对Web Scraping的详细解释: 一、定义与原理 Web Scraping是指采用技术手段从大量网页中提取结构化和非结构化信息,并按照一定的规…...
移远通信5G RedCap模组RG255C-CN通过中国电信5G Inside终端生态认证
近日,移远通信5G RedCap模组RG255C-CN荣获中国电信颁发的5G Inside终端生态认证证书。这表明,该产品在5G基本性能、网络兼容性、安全特性等方面已经过严格评测且表现优异,将进一步加速推动5G行业终端规模化应用。 中国电信5G Inside终端生态认…...
Javaweb梳理17——HTMLCSS简介
Javaweb梳理17——HTML&CSS简介 17 HTML&CSS简介17.1 HTML介绍17.2 快速入门17.3 基础标签17.3 .1 标题标签17.3.2 hr标签17.3.3 字体标签17.3.4 换行17.3.8 案例17.3.9 图片、音频、视频标签17.3.10 超链接标签17.3.11 列表标签17.3.12 表格标签17.3.11 布局标签17.3.…...
【Android、IOS、Flutter、鸿蒙、ReactNative 】自定义View
Android Java 自定义View 步骤 创建一个新的Java类,继承自View、ViewGroup或其他任何一个视图类。 如果需要,重写构造函数以支持不同的初始化方式。 重写onMeasure方法以提供正确的测量逻辑。 重写onDraw方法以实现绘制逻辑。 根据需要重写其他方法&…...
win11跳过联网激活步骤
win11跳过联网激活步骤 win11跳过联网激活步骤方法一:使用Shift F10快捷键(推荐)1. 启动Windows 112. 选择键盘布局或输入法3. 是否想要添加第二种键盘布局4. 让我们为你连接到网络5. 调出管理员模式CMD6. 耐心等待自动重启7. 启动Windows 1…...
利用c语言详细介绍下冒泡排序
软件开发过程中,排序算法是常规且使用众多的方法之一,而冒泡算法又是排序算法中最常规且基本的算法。今天我们利用c语言,图文详细介绍下冒泡算法。 一、图文介绍 我们输入一个数组,数组为【10,5,3…...
C# 面向对象
C# 面向对象编程 面向过程:一件事情分成多个步骤来完成。 把大象装进冰箱 (面向过程化设计思想)。走一步看一步。 1、打开冰箱门 2、把大象放进冰箱 3、关闭冰箱门 面向对象:以对象作为主体 把大象装进冰箱 1、抽取对象 大象 冰箱 门 ࿰…...
android wifi扫描的capability
混合型加密android11 8155与普通linux设备扫描到的安全字段差别 android应用拿到关于wifi安全的字段: systembar-WifiBroadcastReceiver---- scanResult SSID: Redmi_697B, BSSID: a4:39:b3:70:8c:20, capabilities: [WPA-PSK-TKIPCCMP][WPA2-PSK-TKIPCCMP][RSN-PSK…...
datawhale 2411组队学习:模型压缩4 模型量化理论(数据类型、int8量化方法、PTQ和QWT)
文章目录 一、数据类型1.1 整型1.2 定点数1.3 浮点数1.3.1 正规浮点数(fp32)1.3.2 非正规浮点数(fp32)1.3.3 其它数据类型1.3.4 浮点数误差1.3.5 浮点数导致的模型训练问题 二、量化基本方法2.1 int8量化2.1.1 k-means 量化2.1.2 …...
数据分析-48-时间序列变点检测之在线实时数据的CPD
文章目录 1 时间序列结构1.1 变化点的定义1.2 结构变化的类型1.2.1 水平变化1.2.2 方差变化1.3 变点检测1.3.1 离线数据检测方法1.3.2 实时数据检测方法2 模拟数据2.1 模拟恒定方差数据2.2 模拟变化方差数据3 实时数据CPD3.1 SDAR学习算法3.2 Changefinder模块3.3 恒定方差CPD3…...
POD-Transformer多变量回归预测(Matlab)
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现POD-Transformer多变量回归预测,本征正交分解数据降维融合Transformer多变量回归预测,使用SVD进行POD分解(本征正交分解); 2.运行环境Matlab20…...
Hadoop生态圈框架部署(七)- MySQL安装与配置教程
文章目录 前言一、MySQL安装与配置(手动部署)1. 下载MySQL2. 上传安装包3. 解压HBase安装包4. 配置4.1 配置 MySQL 的主配置文件 my.cnf4.2 配置 MySQL 服务的脚本 5. 初始化MySQL数据库6. 创建快捷方式7. 启动MySQL服务8. 修改MySQL登录密码8.1 使用临时…...
视频直播5G CPE解决方案:ZX7981PG/ZX7981PMWIFI6网络覆盖
方案背景 视频直播蓬勃发展的当下,传统直播网络联网方式的局限性越来越明显。目前传统直播的局限性主要集中在以下几个方面: 传统直播间网络架构条件有限,可连接WIFI数量少,多终端同时直播难以维持;目前4G网络带宽有限…...
wordpress win8/百度seo排名优化技巧分享
你还在为访问各种数据库而写SqlHelper、OracleHelper……这些数据库操作助手类吗,还在为写一个通用的访问数据库操作类,而定义一堆接和实现吗? 从DotNet2.0以后微软已经为我们写好了这些我直接封装一下就可以成为一个通用的数据库操作助手类。…...
一网网站制作平台/seo上首页
什么是探针 探针Probe是由 kubelet对容器执行的定期诊断。要执行诊断,kubelet 调用由容器实现的 Handler。有三种类型的处理程序: ExecAction:在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功。TCPSocketAction:对…...
如何选择建网站公司/新手怎么做网络销售
文章目录一 . 网络编程中的基本概念1.1 网络编程1.2 客户端(client) / 服务器(server)1.3 请求(request) / 响应(response)1.4 客户端和服务器之间的交互数据1.4.1 一问一答1.4.2 多问一答1.4.3 一问多答1.4.4 多问多答二 . socket 套接字2.1 UDP 的 Socket API2.1.1 引子2.1.2…...
小程序源码安装/广州seo网站管理
描述给定一个有向图,图节点的拓扑排序被定义为:对于每条有向边A--> B,则A必须排在B之前 拓扑排序的第一个节点可以是任何在图中没有其他节点指向它的节点 找到给定图的任一拓扑排序你可以假设图中至少存在一种拓扑排序说明Learn mor…...
温岭哪里有做网站的/网站内部seo
SUSE的zypper本地源配置起来跟yum的配置很相似,它们的配置文件有很多相似之处。不过,个人觉得zypper这个工具稍微强大些。在SUSE下,可以通过一条zypper的命令,即可完成zypper源的配置。一、zypper源配置我这里内部搭建了一台源服务…...