jQuery从入门到应用:选择器、DOM与Ajax综合指南
文章目录
- 前言
- jQuery对象
- 1、jQuery的使用
- 在需要使用jQuery的页面引入Js文件
- 使用jQuery选择页面元素并获取其文本内容
- 2、jQuery包装集与Dom对象
- DOM对象和jQuery对象的选择及互相转换
- jQuery对象
- 关键点说明:
- jQuery选择器
- 1、基础选择器
- 关键点说明
- 2、层次选择器
- 关键点说明
- 3、表单选择器
- 4、选择器类型对比表
- Dom操作
- 1、操作元素的属性
- 获取和设置固有属性
- 获取布尔类型的属性
- 补充说明:`attr()` vs `prop()`
- 2、使用jQuery操作元素样式
- 获取元素的样式类名
- 设置元素的样式
- 添加元素的样式
- 移除样式
- 3、操作元素的内容
- 4、创建元素和添加元素
- 创建元素:`$("元素标签")`
- 添加元素
- 5、删除元素
- 6、遍历元素`each()`
- jQuery事件
- 1、ready加载事件
- 2、绑定事件
- 3、jQuery的`.click()`
- 方法1:直接在JavaScript中使用jQuery的.click()方法绑定事件
- 方法2:在HTML标记中直接使用内联事件处理程序
- 额外提示:
- Ajax
- 原生Ajax的实现流程
- Ajax使用
- 案例
前言
提示:这里可以添加本文要记录的大概内容:
jQuery对象
1、jQuery的使用
在需要使用jQuery的页面引入Js文件
在HTML文件中正确地引入jQuery库非常重要。以下是正确的做法:
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
注:如果在使用jQuery对象时未引入jQuery的核心JS文件,则会报错 ($ is not defined)。
使用jQuery选择页面元素并获取其文本内容
$符号是jQuery函数的别名,相当于用于jQuery对象的引用, 选择元素以及执行各种DOM操作、事件处理等。
<div id="mydiv">hello</div>
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">// 获取div元素var div = $("#mydiv"); // 正确的方式var div2 = jQuery("#mydiv"); // 也可以使用jQuery代替$,两者效果相同console.log(div.text()); // 输出div内的文本 "hello"
</script>
2、jQuery包装集与Dom对象
DOM与 jQuery对象转换
使用原生DOM方法以及 jQuery选择器来获取页面中的div元素。
DOM对象和jQuery对象的选择及互相转换
通过document.getElementById方法可以直接从DOM中选取元素。以下是正确的做法:
// 通过document获取div
var divDom = document.getElementById("mydiv");
console.log(divDom); // 输出的是一个原生的DOM元素对象// jQuery包装集对象:通过jQuery选择器获取div
var divJquery = $("#mydiv");
console.log(divJquery);console.log("==== jQuery包装集对象与DOM对象互相转换 ====");// 将DOM对象转换成jQuery对象,使用$()将dom对象括起来
var domToJquery = $(divDom); // 使用$(domObject)来包裹DOM对象
console.log(domToJquery); // 输出转换后的jQuery对象// 将jQuery对象转换成DOM对象,获取jQuery包装集对象的下标
var jqueryToDom = divJquery[0]; // 或者使用 divJquery.get(0)
console.log(jqueryToDom); // 输出原始的DOM对象
当获取元素对象,元素不存在时,
通过document获取的值,返回null(通过判断返回值是否为null,来得知元素是否存在)
通过jQuery获取的值,返回空包装集(通过判断包装集的长度length,来得知元素是否存在,存在至少length为1)
jQuery对象
使用jQuery的选择器语法可以更方便地选取页面元素:
var divDom = document.getElementById("mydiv");
console.log(mydiv)// 通过jQuery选择器获取div
var div = $("#mydiv"); // 注意这里的$符号两边没有空格,且字符串要用英文双引号或单引号
console.log(div); // 输出的是一个jQuery对象,包含了匹配到的所有元素
关键点说明:
- 获取DOM对象:使用
document.getElementById("mydiv")获取页面中id为"mydiv"的元素。 - 获取jQuery对象:使用
$("#mydiv")选取相同的元素,但这次是作为jQuery对象返回。 - DOM对象转jQuery对象:使用
$()把DOM对象括起来:$(DOM对象) - jQuery对象转DOM对象:可以使用
.get(0)方法从jQuery对象中提取出对应的DOM对象。
jQuery选择器
1、基础选择器
| 选择器类型 | 使用方法 | 描述 |
|---|---|---|
| id选择器 | $("#id属性值") | 获取指定id属性值的元素。如果出现多个同名id,只会获取第1个 |
| 类选择器 | $(".class属性值") | 获取指定class属性值的元素 |
| 元素选择器 | $("标签名/元素名") | 获取指定标签名的元素 |
| 通用选择器 | $("*") | 获取所有的元素 |
| 组合选择器 | $("选择器1,选择器2...") | 获取指定选择器选中的元素,多个选择器之间用逗号隔开 |
【示例代码】
注意:在下面的代码示例中,变量名为clas而非class,以避免与JavaScript保留字冲突。
<script type="text/javascript">// ID选择器 $("#id属性值")var mydiv1 = $("#mydiv1");console.log("ID选择器:", mydiv1);// 类选择器 $(".class属性值")var clas = $(".blue");console.log("类选择器:", clas);// 元素选择器 $("标签名/元素名")var divs = $("div");console.log("元素选择器:", divs);// 通用选择器 $("*")var all = $("*");console.log("通用选择器:", all);// 组合选择器 $("选择器1,选择器2,...")var group = $("#mydiv1, .blue, div");console.log("组合选择器:", group);
</script>
关键点说明
-
正确示例:
$("#id属性值") -
正确示例:
var clas = $(".blue"); -
选择器使用:
- ID选择器:通过
#加上元素的ID来选取特定的元素。 - 类选择器:通过
.加上类名来选取所有具有该类的元素。 - 元素选择器:直接使用标签名来选取页面上所有的该类型的元素。
- 通用选择器:使用
*来选取页面上的所有元素。 - 组合选择器:通过逗号分隔不同的选择器,可以同时选取多个不同条件的元素。
- ID选择器:通过
2、层次选择器
| 选择器类型 | 连接符号 | 使用方法 | 描述 |
|---|---|---|---|
| 后代选择器 | 空格 | $("指定元素 元素名") | 获取指定元素的所有指定子元素(包含子元素及子元素的子元素) |
| 子代选择器 | 大于号 > | $("指定元素 > 元素名") | 获取指定元素的所有指定第一代子元素(只会选择第一级子元素) |
| 相邻选择器 | 加号 + | $("指定元素 + 元素名") | 获取指定元素的下一个指定元素(只会找一个元素) |
| 同辈选择器 | 波浪号 ~ | $("指定元素 ~ 元素名") | 获取指定元素后面的所有指定元素 |
$(document).ready(function(){// 后代选择器(空格)var hd = $("#food li");console.log("后代选择器选中的元素:", hd);// 子代选择器(大于号 `>`)var zd = $("#food > li"); console.log("子代选择器选中的元素:", zd);// 相邻选择器(加号 `+`)var xl = $("#mydiv + div"); // 选择紧跟在#mydiv之后的divconsole.log("相邻选择器选中的元素:", xl);// 同辈选择器(波浪号 `~`)var tb = $("#mydiv ~ div"); // 选择#mydiv之后的所有同级divconsole.log("同辈选择器选中的元素:", tb);
});
关键点说明
- 后代选择器:使用空格
来表示后代选择器,它会选择指定元素内的所有匹配的后代元素。
var hd = $("#food li");
- 子代选择器:使用大于号
>来表示子代选择器,它只会选择直接子元素。
var zd = $("#food > li");
- 相邻选择器:使用加号
+来表示相邻选择器,它会选择紧接在另一个元素之后的某个元素。
var xl = $("#mydiv + div");
- 同辈选择器:使用波浪号
~来表示同辈选择器,它会选择位于同一个父元素下,并且在目标元素之后的所有匹配的兄弟元素。
var tb = $("#mydiv ~ div");
3、表单选择器
jQuery提供了一些特殊的选择器用于选取表单内的特定元素。这里是一些常用的表单选择器:
:input:匹配所有输入元素,包括<input>,<textarea>,<select>和<button>。:radio:匹配所有单选按钮。:checkbox:匹配所有复选框。:checked:匹配所有被选中的元素(适用于单选按钮和复选框)。:selected:匹配所有被选中的<option>元素。
格式:$(":类型")
<script type="text/javascript">// 选择所有输入元素var forms = $(":input");console.log(forms);// 仅选择<input>标签元素var inputs = $("input");console.log(inputs);// 获取所有的单选框var radios = $(":radio");console.log(radios);
</script>
4、选择器类型对比表
| 选择器 | jQuery | 描述 |
|---|---|---|
| [属性名] | $([属性名]") | 获取所有设置过指定属性名的元素 |
| [属性名=‘属性值’] | $([属性名='属性值']") | 获取所有设置过指定属性名为指定值的元素 |
| :checked | $("checked") | 获取选中状态为选中的元素(单选框与复选框) |
| :selected | $("selected") | 获取选中状态为选中的元素(下拉框) |
| :gt(index) | $(":gt(index)") | 获取下标大于指定值的元素 |
| :eq(index) | $(":eq(index)") | 获取下标等于指定值的元素 |
| :odd | $(":odd ") | 获取所有奇数下标 |
| :even | $(":even") | 获取所有偶数下标 |
【示例代码】
<script type="text/javascript">// [属性名] $("[属性值]")var test = $("[name]"); //选择所有设置了name属性的元素console.log(test);// [属性名='属性值'] $([属性名='属性值']")var test2 = $("[name='ufav']"); //选择所有设置了name属性且值为'ufav'的元素console.log(test2);/* 获取name为'usex'的被选中的单选框 */// 注意此处应该是:checkedvar test3 = $(":radio[name='usex']:checked");console.log(test3);
</script>
Dom操作
1、操作元素的属性
关于attr()和prop()方法的描述:
| 分类 | 描述 | attr() 方法 | prop() 方法 |
|---|---|---|---|
| 设置属性 | 给元素设置属性值 | 对象.attr("属性名", "属性值"); | 对象.prop("属性名", "属性值"); |
| 获取属性 | 获取元素的属性值 | var 属性值 = 对象.attr("属性名"); | var 属性值 = 对象.prop("属性名"); |
| 区别 | 固有属性 | 可以操作元素本身就拥有的固有属性 | 可以操作元素本身就拥有的固有属性 |
| 布尔类型属性 | 如 checked, selected, disabled | 可以操作,但不推荐用于布尔类型的属性 | 推荐使用,特别适合处理返回布尔值的属性 |
| 自定义属性 | 用户自己定义的属性 | 可以操作用户自定义的属性 | 不能操作用户自定义的属性 |
获取和设置固有属性
ck1和ck2代表复选框的id
// 获取属性 - 使用 attr()
var name1 = $("#ck1").attr("name");
console.log(name1); // 输出 ck1 的 name 属性值// 设置属性 - 使用 prop() 推荐用于布尔类型的属性
$("#ck2").prop("checked", true); // 设置为选中状态// 获取属性 - 使用 prop()
var name2 = $("#ck1").prop("name");
console.log(name2); // 输出 ck1 的 name 属性值// 设置属性 - 使用 attr()
$("#ck2").attr("checked", "checked"); // 不推荐用于布尔类型的属性// 设置属性 - 使用 prop()
$("#ck2").prop("checked", true); // 推荐用于布尔类型的属性
获取布尔类型的属性
// 获取布尔类型属性 - 使用 attr() (不推荐)
var cked1 = $("#ck1").attr("checked");
console.log(cked1); // 可能返回 'checked' 或 undefined,取决于是否选中// 获取布尔类型属性 - 使用 prop() (推荐)
var cked2 = $("#ck1").prop("checked");
console.log(cked2); // 返回 true 或 false
区别:
- 固有属性:元素本身就拥有的属性,
attr()和prop()都可以操作固有属性 - 返回值是布尔类型的属性
checked、selected、disabled、prop()操作返回值是布尔类型的属性 - 自定义属性:用户自己定义的属性,
attr()可以操作,prop()不可以操作
总结:如果属性的返回值是布尔类型,选择prop方法,否则使用attr方法
补充说明:attr() vs prop()
-
固有属性:指的是HTML标签本身所具备的属性,例如
input标签的type、value等属性。对于这些属性,虽然attr()和prop()都可以操作,但对于布尔类型的属性(如checked),使用prop()更为合适。 -
布尔类型属性:这些属性反映了一个状态(真或假)。对于这类属性,使用
prop()通常能得到更准确的结果,一个复选框是否被选中应该用prop('checked')来判断。 -
自定义属性:指用户通过
data-*等方式添加到HTML标签上的额外属性。这类属性只能通过attr()方法来获取或设置。 -
固有属性:HTML标签本身具备的属性,如
input的type、value等。对于布尔类型的属性(例如checked,selected,disabled),推荐使用prop()方法。 -
布尔类型属性:反映状态(真或假)。复选框是否被选中应使用
prop('checked')来判断。 -
自定义属性:用户通过
data-*方式添加的额外属性,这类属性只能通过attr()方法来获取或设置。
2、使用jQuery操作元素样式
- 获取元素的样式类名
使用attr("class")可以获取元素的所有类名。
var classList = $("#elementId").attr("class");
console.log(classList); // 输出元素的所有类名
- 设置元素的样式(覆盖原有样式)
attr("class","样式名")
直接设置CSS属性会覆盖原有的样式值。
$("#elementId").css("color", "red"); // 将文本颜色设置为红色
- 添加元素的样式(在原有基础上追加新的样式类)
使用addClass("样式名")方法可以在不移除原有类的情况下添加新的类。
$("#elementId").addClass("newClass"); // 添加一个名为 'newClass' 的新类
- 添加具体的样式
添加一个或多个具体的样式规则。对于多个样式规则,可以传递一个对象给.css()方法。
- 添加一个具体的样式:
css("样式名","样式值")
$("#elementId").css("background-color", "blue"); // 设置背景色为蓝色
- 添加多个具体的样式:
css({"样式名":"样式值","样式名":"样式值"})
$("#elementId").css({"font-size": "20px", // 设置字体大小为20px"border": "1px solid black" // 设置边框样式});
- 移除样式
使用removeClass("样式名")方法可以从元素中移除指定的类。
$("#elementId").removeClass("oldClass"); // 移除名为 'oldClass' 的类
如果要移除所有类,可以直接调用removeClass()而无需参数:
$("#elementId").removeClass(); // 移除所有类
这些方法提供了灵活的方式来操作HTML元素的样式,无论是通过直接修改样式属性还是通过添加、移除样式类。根据具体的需求选择合适的方法可以有效地控制页面元素的外观。
| 方法 | 说明 |
|---|---|
html() | 获取元素的 html 内容 |
html("html,内容") | 设置元素的 html 内容 |
text() | 获取元素的 文本 内容,不包含 html |
text("text,内容") | 设置元素的 文本 内容,不包含 html |
val() | 获取元素的 value 值 |
val("值") | 设定元素的 value 值 |
操作元素的内容:
val()操作表单元素的值
取值:var值=表单元素对象.val();
赋值:表单元素对象.val(值);
html()操作非表单元素的内容(包含html标签)
取值:var内容 = 对象.html();
赋值:对象.html(内容);
text()操作非表单元素的文本内容(不包含html标签)
取值:var内容=对象.text();
赋值:对象.text(内容);
获取元素的样式类名
var classList = $("#elementId").attr("class");
console.log(classList); // 输出元素的所有类名
设置元素的样式
直接设置CSS属性会覆盖原有的样式值:
$("#elementId").css("color", "red"); // 将文本颜色设置为红色
添加元素的样式
在不移除原有类的情况下添加新的类:
$("#elementId").addClass("newClass"); // 添加一个名为 'newClass' 的新类
移除样式
从元素中移除指定的类:
$("#elementId").removeClass("oldClass"); // 移除名为 'oldClass' 的类
如果想要移除所有类:
$("#elementId").removeClass(); // 移除所有类
3、操作元素的内容
| 方法 | 说明 |
|---|---|
html() | 获取或设置元素的HTML内容 |
text() | 获取或设置元素的文本内容,不包含HTML |
val() | 获取或设置表单元素的值 |
【示例代码】
<input type="text" name="uname" id="uname" value="oop" />
<div id="html"></div>
<div id="text"></div><script type="text/javascript">/* val() 操作表单元素的值 */// 通过原生 JavaScript 获取值console.log(document.getElementById("uname").value);// 使用原生 JavaScript 赋值document.getElementById("uname").value = "面向对象";// 通过 val 方式获取值console.log($("#uname").val());// 通过 val 方式获赋值$("#uname").val("面向对象");/* html() 操作非表单元素的内容(包含 HTML 标签) */// 赋值$("#html").html("Hello");$("#html").html("<h2>Hello</h2>");// 取值console.log($("#html").html());/* text()操作非表单元素的文本内容 (不包含html标签) */// 赋值$("#text").html("Hello");$("#text").html("<h2>Hello</h2>");// 取值console.log($("#html").text());
</script>
4、创建元素和添加元素
创建元素:$("元素标签")
// 定义html字符串
var htmlTxt = "<p>这是一个段落</p>";
console.log(htmlTxt); // 输出原始的HTML字符串// 将html字符串转换成jQuery对象
var htmlJquery = $(htmlTxt);
console.log(htmlJquery); // 输出jQuery对象// 输出html字符串中的内容(即<p>标签内的文本)
console.log(htmlJquery.html()); // 输出<p>标签内的文本内容
添加元素
对象.before("内容"):前追加,在元素的同级追加,内容可以是对象、html或字符串
对象.after("内容"):后追加,在元素的同级追加,内容可以是对象、html或字符串
对象.prepend("内容"):在元素的内部最前面追加子元素,内容可以是对象、html或字符串
对象.append("内容"):在元素的内部最后面追加子元素,内容可以是对象、html或字符串
$("内容").prependTo(对象):在元素的内部最前面追加子元素,内容可以是对象、html或字符串
$("内容").appendTo(对象):在元素的内部最后面追加子元素,内容可以是对象、html或字符串
<span class="red">泰山</span>
<span class="blue">偶像</span>
<script type="text/javascript">
console.log("----- 同级追加 -----");// 得到目标对象var ts = $(".red");// 准备要追加的内容var span = "<span class='pink'>女神</span>";// 将内容追加到指定元素前面ts.before(span);// 将内容追加到指定元素后面ts.after(span);// 得到要追加的元素(已存在的元素)var blue = $(".blue");// 追加已有元素ts.before(blue); // 在 .red 元素之前插入 .blue 元素ts.after(blue); // 在 .red 元素之后插入 .blue 元素// 如果需要打印日志来确认操作结果console.log(ts);console.log($(".pink")); // 打印新添加的 span 元素console.log(blue); // 打印 .blue 元素
</script>
添加元素时(同级添加和子元素添加)
如果元素不存在,则创建元素,并添加
如果元素存在,则会获取已存在的元素,并剪切到新的位置
<script type="text/javascript">
console.log("----- 子元素追加 -----");// 准备要追加的元素var sp = "<span>老腊肉</span>";var sp2 = "<span>小奶狗</span>";// prepend():在选定元素的最前面追加子元素$(".green").prepend(sp);// append():在选定元素的最后面追加子元素$(".green").append(sp2);// prependTo():将新元素插入到选定元素的最前面$(sp).prependTo($(".green"));// appendTo():将新元素插入到选定元素的最后面$(sp2).appendTo($(".green"));// 追加已存在的元素(例如带有 .blue 类的元素)$(".green").append($(".blue"));// 打印日志来确认操作结果console.log($(".green"));
</script>
5、删除元素
remove():删除所选元素或指定的子元素,包括整个标签和内容一起删
empty():清空所选元素的内容
// 删除class属性为green的元素
$(".green").remove(); // 清空元素(移除class属性为blue的元素内部的所有内容)
$(".blue").empty();
6、遍历元素each()
$(selector).each(function(index, element) :遍历元素
参数function为遍历时的回调函数
index为遍历元素的下标,从0开始。
element是当前的元素,此时是dom元素。
$(".green").each(function(index, element) {// 'this' 是当前遍历到的DOM对象console.log(this); // 输出当前的DOM对象// 输出当前DOM对象的innerHTML属性,显示其内部HTML内容console.log(this.innerHTML);// 使用$(this)将DOM对象包装成一个jQuery对象,并输出其html内容console.log($(this).html());// 输出当前元素的下标(索引)console.log("下标:" + index);// 输出当前遍历到的DOM对象console.log(element);// 将当前的DOM对象转换为jQuery对象并输出console.log($(element));
});
jQuery事件
1、ready加载事件
ready()类似于onLoad()事件
ready()可以写多个,按顺序执行$(document).ready(function(){})
等价于
$(function(){})
ready 加载事件(预加载事件),当HTML的文档结构加载完毕后执行
只有引入了JS文件才能用
格式:
$(document).ready(function(){});
简略版:
$(document).ready(function(){console.log("ready加载事件...");
});$(function(){console.log("ready加载事件2...");
});
onload加载事件(JS中提供的方法),当HTML的文档结构及引入的资源加载完毕后执行
window.onload=function() {
}
加载慢
window.onload = function() {console.log("load加载事件...");
};
2、绑定事件
eventType:是一个对应的事件类型的字符串
-
事件类型:
- 点击事件:
click - 聚焦事件:
focus - 失去焦点事件(通常称为失效事件):
blur - 改变事件:
change - 鼠标悬停事件:应为
mouseover而不是moueseover - 鼠标移开事件:
mouseout
- 点击事件:
-
eventData:需要传递给事件处理程序的数据,参数格式是一个 JSON 对象,例如{键: 值, 键: 值...}。 -
handler:当事件触发时执行的回调函数。 -
bind绑定事件(单个):
$(选择器).bind("事件名", function() {// 事件处理代码});
bind() 绑定事件语法:
$(selector).bind(eventType[,eventData],handler);
- 绑定事件(多个):
方式一:为某一个元素绑定不同的事件,执行不同的函数
$(选择器).bind("事件名1", function() {// 事件处理函数1
}).bind("事件名2", function() {// 事件处理函数2
});
方式二:为某一个元素绑定不同的事件,执行相同的函数(多个事件用空格隔开)
$(选择器).bind("事件名1 事件名2", function(event) {// 共享的事件处理逻辑console.log('触发了 ' + event.type + ' 事件');
});
方式三:为某一个元素绑定不同的事件,执行不同的函数(使用JSON对象格式)
$(选择器).bind({"事件名1": function() {// 事件处理函数1},"事件名2": function() {// 事件处理函数2}
});
如何绑定事件
1.事件源:确认给什么元素绑定事件,通过不同的选择获取对应的元素
2.事件类型:给元素绑定什么事件,常用的事件名
3.执行函数:当事件触发时需要执行的函数,匿名函数·或·自定义函数
- on绑定事件(单个)
推荐使用 .on() 方法来绑定事件,而不是 .bind()。下面是使用 .on() 方法的示例:
$(选择器).on('事件名', [eventData], function(event) {// 事件处理代码
});
示例代码:
// 绑定点击事件
$('#myButton').on('click', function() {console.log('按钮被点击了');
});// 使用 eventData 传递额外数据
var eventData = { message: 'Hello World' };
$('#myButton').on('click', eventData, function(event) {console.log(event.data.message); // 输出 "Hello World"
});
这样不仅使描述更加准确,还提升了文档的可读性和美观性。它更灵活且是较新版本的标准做法。
3、jQuery的.click()
方法1:直接在JavaScript中使用jQuery的.click()方法绑定事件
这种方法通过外部JavaScript代码为HTML元素绑定事件处理器。它不仅有助于保持代码的整洁性,还能使HTML页面更加简洁,不包含任何内联JavaScript代码。
<!-- HTML部分 -->
<button id="btnA">按钮A</button>
<button id="btn6">按钮B</button><!-- 确保正确引入jQuery库 -->
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">// 绑定单个点击事件到按钮A$("#btnA").click(function(){console.log("按钮A被点击了...");});// 为按钮B同时绑定多个事件(点击和鼠标移出)$("#btnB").click(function(){console.log("按钮B被点击了...");}).mouseout(function(){console.log("鼠标从按钮B移开了...");});
</script>
详细解释:
$("#btnA"):首先通过jQuery选择器选中id为btnA的元素。.click(function(){...}):为该元素添加一个点击事件监听器。当用户点击按钮时,控制台会打印“按钮A被点击了…”。- 对于
#btnB,我们使用了链式调用的方式同时绑定了两个事件处理程序(点击和鼠标移出),这使得代码更加紧凑和易于阅读。
方法2:在HTML标记中直接使用内联事件处理程序
尽管这种方法简单直接,但它混合了内容与行为,不利于维护和扩展,因此通常不推荐用于大型项目或复杂的Web应用。
<!-- HTML部分 -->
<button onclick="console.log('按钮C被点击了...')">按钮C</button>
详细解释:
onclick="console.log('按钮C被点击了...')":直接在HTML标签中定义了一个点击事件处理器。这意味着每当用户点击这个按钮时,都会执行console.log('按钮C被点击了...')这段JavaScript代码。
额外提示:
- 事件委托:如果需要对动态加载的内容进行事件绑定,可以考虑使用事件委托。
$(document).on('click', '#dynamicBtn', function(){console.log('动态加载的按钮被点击了...');});
-
避免重复绑定:确保不会多次绑定相同的事件处理函数给同一个元素,以免触发多次相同的行为。可以通过
.off()方法解除之前的绑定,或者在绑定之前检查是否已经存在相应的事件处理器。 -
使用
.on()代替.bind()、.click()等:从jQuery 1.7开始,推荐使用.on()方法作为统一的事件绑定机制。
$('#element').on('click', function() {console.log('元素被点击');});
Ajax
异步无刷新技术
原生Ajax的实现流程
-
得到XMLHttpRequest对象
var xhr = new XMLHttpRequest(); -
打开请求
xhr.open(method, uri, async);method:请求方式,通常是GET或POST。uri:请求地址。async:是否异步。如果是true表示异步(推荐),false表示同步。
-
发送请求
xhr.send(params);params:请求时需要传递的参数。- 如果是
GET请求,则设置为null(GET请求的参数应包含在URL中)。 - 如果是
POST请求,没有参数时设置为null,有参数则设置为参数内容(例如:"name=value&name2=value2")。
- 如果是
-
接收响应
xhr.status:响应状态200:表示请求成功。404:表示资源未找到。500:表示服务器内部错误或其他服务器端错误。
xhr.responseText:得到响应结果
同步请求:
<script type="text/javascript">/*** 同步请求*/function test01() {// 得到XMLHttpRequest对象var xhr = new XMLHttpRequest();// 打开请求xhr.open("GET", "js/data.json", false); // 第三个参数设为false表示同步请求// 发送请求xhr.send(null);// 判断响应状态if (xhr.status == 200) {console.log(xhr.responseText);} else {console.log("状态码:" + xhr.status + ",原因:" + xhr.responseText);}}
</script>
异步请求:
/*** 异步请求*/
function test02() {// 得到XMLHttpRequest对象var xhr = new XMLHttpRequest();// 打开请求xhr.open("GET", "js/data.json", true); // 第三个参数设为true表示异步请求// 发送请求xhr.send(null);// 判断响应状态if(xhr.ststus == 200){// 获取响应结果console.log(xhr.responseText);} else {console.log("状态码:" + xhr.status + ",原因:" + xhr.responseText);}}
}
由于是异步请求,所以需要知道后台已经将请求处理完毕,才能获取响应结果
通过监听readyState的变化来得知后面的处理状态 4= 完全处理
xhr.onreadystatechange = function(){ }
Ajax使用
jquery调用ajax方法:
格式:$.ajax({});
参数:
type:请求方GET/POST
*url:请求地址url
async:是否异步,默认是true表示异步,false=同步
data:发送到服务器的数据
dataType:预期服务器返回的数据类型。"JSON"表示将得到的JSON字符串自动封装成JSON对象
contentType:设置请求头
*success:请求成功时调用的函数(回调函数)
error:请求失败时调用此函数
$.ajax({type: "GET", // 请求类型,例如:"POST"、"GET"url: "js/data.json", // 请求路径data: {"paramName1": "value1", // 参数名:值"paramName2": "value2" // 另一个参数名:值},async: true, // 默认是true,可以省略dataType: "json",// dataType: "json", // 文本,字符串success: function(response) { // 形参名可以任意 函数的形参:响应结果// 在这里处理成功获取的数据console.log(response);}
});
发送请求方式为GET的ajax请求
- 发送请求,无参数,无返回值:
$.get("请求路径");
- 发送请求,有参数,无返回值:
$.get("请求路径", "请求参数");
- 发送请求,无参数,有返回值:
$.get("请求路径", function(返回结果) {// 处理返回结果
});
- 发送请求,有返回值,有参数
$.get("请求路径", "请求参数",function(返回结果) {// 处理返回结果
});
- 使用jQuery的
$.get()方法发起一个GET类型的Ajax请求,以加载远程数据
$.get("js/data.json", {"uname": "zs", "upwd": "123"}, function(data) {console.log(data);
});
确保使用标准的英文双引号"而不是中文引号或任何其他特殊字符。这段代码将向js/data.json发送一个GET请求,传递uname和upwd作为查询参数,并在请求成功后通过console.log(data)打印服务器返回的数据。
发送请求方式为POST的ajax请求
- 发送请求,无参数,无返回值:
$.post("请求路径");
- 发送请求,有参数,无返回值:
$.post("请求路径", "请求参数");
- 发送请求,无参数,有返回值:
$.post("请求路径", function(返回结果) {// 处理返回结果
});
- 发送请求,有返回值,有参数
$.post("请求路径", "请求参数",function(返回结果) {// 处理返回结果
});
- 使用
$.getJSON()方法来得到返回结果是JSON格式数据
$.getJSON("js/data.json", {"uname": "zs", "upwd": "123"}, function(data) {console.log(data);
});
这段代码将会:
- 向
js/data.json发送一个GET请求。 - 传递
uname和upwd作为查询参数。 - 如果请求成功并且服务器返回的是JSON格式的数据,则自动解析这个JSON数据。
- 使用
console.log(data)打印解析后的对象或数组(即返回的JSON数据)。
请确保:
- URL
"js/data.json"和 参数{"uname": "zs", "upwd": "123"}根据实际情况进行替换。 - 使用英文状态下的双引号和括号,以避免语法错误。
这样就可以正确地利用$.getJSON()来获取JSON格式的数据了。
案例
以下是补充完整的 AJAX 案例代码,包含必要的 HTML 结构、错误处理:
<!DOCTYPE html>
<html>
<head><title>AJAX 数据表格示例</title><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><style>table {width: 80%;margin-top: 20px;border-collapse: collapse;}th, td {padding: 12px;text-align: left;border-bottom: 1px solid #ddd;}th {background-color: #f2f2f2;}</style>
</head>
<body><div id="result"></div><script>// 发送 AJAX 请求,获取数据$.ajax({type: "GET",url: "js/user.json",dataType: "json", // 明确指定响应类型data: {"name": "aa","pwd": "123"},success: function(result) {console.log("请求成功:", result);testData(result);},error: function(xhr, status, error) { // 新增错误处理console.error("请求失败:", status, error);$('#result').html('<p style="color: red">数据加载失败,请稍后重试</p>');}});// 数据处理函数function testData(data) {// 增强数据校验if (!data || data.code !== 1 || !Array.isArray(data.list)) {console.error("数据格式异常:", data);$('#result').html('<p style="color: orange">数据格式异常或为空</p>');return;}try {// 创建表格对象const table = $('<table>').addClass('data-table');// 创建表头const headerRow = $('<tr>').append($('<th>').text('用户编号'),$('<th>').text('用户姓名'),$('<th>').text('注册时间') // 新增列示例);$('<thead>').append(headerRow).appendTo(table);// 创建表格体const tbody = $('<tbody>');data.list.forEach(function(user) {const row = $('<tr>').append($('<td>').text(user.id),$('<td>').text(user.name),$('<td>').text(user.registerDate || 'N/A') // 处理可能不存在的字段);tbody.append(row);});table.append(tbody);// 渲染到页面$('#result').empty().append(table);} catch (e) {console.error("表格渲染失败:", e);$('#result').html('<p style="color: red">数据处理异常</p>');}}</script>
</body>
</html>
JSON 数据示例 (js/user.json):
{"code": 1,"message": "success","list": [{"id": 1001,"name": "张三","registerDate": "2023-01-15"},{"id": 1002,"name": "李四","registerDate": "2023-02-20"}]
}
相关文章:
jQuery从入门到应用:选择器、DOM与Ajax综合指南
文章目录 前言jQuery对象1、jQuery的使用在需要使用jQuery的页面引入Js文件使用jQuery选择页面元素并获取其文本内容 2、jQuery包装集与Dom对象DOM对象和jQuery对象的选择及互相转换 jQuery对象关键点说明: jQuery选择器1、基础选择器关键点说明 2、层次选择器关键点…...
10、基于osg引擎生成热力图高度图实现3D热力图可视化、3D热力图实时更新(带过渡效果)
1、结果 2、完整C代码 #include <sstream> #include <iomanip> #include <iostream> #include <vector> #include <random> #include <cmath> #include <functional> #include <osgViewer/viewer> #include <osgDB/Read…...
手搓智能音箱——语音识别及调用大模型回应
一、代码概述 此 Python 代码实现了一个语音交互系统,主要功能为监听唤醒词,在唤醒后接收用户语音问题,利用百度语音识别将语音转换为文本,再调用 DeepSeek API 获取智能回复,最后使用文本转语音功能将回复朗读出来。 …...
Modbus通信协议基础知识总结
1. 数据类型与存储区分类 Modbus协议将数据分为四类存储区,通过存储区代号区分: 输出线圈(0x):可读写,对应二进制开关量(如继电器状态),地址范围000001-065536ÿ…...
vue3 + css 列表无限循环滚动+鼠标移入停止滚动+移出继续滚动
1.动画文件.vue <template><div class"dashboard" click"setFullScreen"><div class"warp-box"><el-scrollbar ref"scrollRef" height"100%" scroll"handelScroll"><div class"…...
使用 CryptoJS 实现 AES 解密:动态数据解密示例
在现代加密应用中,AES(高级加密标准)是一种广泛使用的对称加密算法。它的安全性高、效率好,适合用于各种加密任务。今天,我们将通过一个实际的示例,展示如何使用 CryptoJS 实现 AES 解密,解密动态数据。CryptoJS 是一个基于 JavaScript 的加密库,它支持 AES、DES 等多种…...
Go语言对于MySQL的基本操作
一.下载依赖 终端中输入: go get -u github.com/go-sql-driver/mysql 导入包 import ("database/sql"_ "github.com/go-sql-driver/mysql" ) 二.案例 package main//go get-u github.com/go-sql-driver/mysql 获取驱动 import ("databa…...
AndroidStudio下载安装,环境部署以及常见问题解决教程(亲测)
AndroidStudio下载安装,环境部署以及常见问题解决!!! 文章目录 前言 一、Android Studio 下载与安装 1.1 系统要求 1.2 下载 Android Studio 1.3 安装 Android Studio Windows 系统 1.4 初始配置 二、环境部署 2.1 安装 …...
开源免费一句话生成儿童故事视频核心思想解析
再看一个演示视频,学会核心思想后,可以打造自己的内容生成工具,后文有基于飞书多维表格的实现效果: 一句话灵感生成儿童故事视频演示 这是一款专门为内容素材创作打造的创新工具,可根据用户输入的主题,快速…...
数据结构——最短路(BFS,Dijkstra,Floyd)
完整版可以看我的最短路问题模版总结_稠密图最短路-CSDN博客 考研数据结构只考BFS,Dijkstra和Floyd 下面代码以Acwing模板题为例 BFS代码 适用类型: 1.单源最短路径 2.无权图 3.不适用于带权图和负权回路图 //Acwing走迷宫bfs #include<bits/stdc.h>usi…...
Kali Linux汉化教程:轻松设置中文界面
1.打开终端 2.输入sudo dpkg-reconfigure locales,回车,输入密码,回车 sudo dpkg-reconfigure locales 3.往下滑,滑到底,找到‘zh_CN.UTF-8 UTF-8’,回车 4.选择‘zh_CN.UTF-8’,回车 5.没有 ‘zh_CN.UTF-8’选项的特…...
分布式锁: 并发时,redis如何避免删别人的锁
在使用Redis实现分布式锁的时候,如何避免在并发情况下误删别人的锁。首先,分布式锁的基本概念:是多个客户端在访问共享资源时,通过某种机制来确保同一时间只有一个客户端能持有锁。 Redis通常用SET命令加上NX选项来创建锁…...
Leetcode 160 Intersection of Two Linked Lists
题意 给定两个链表,找这两个链表第一个公共节点,如果没有返回nullptr 题目链接 https://leetcode.com/problems/intersection-of-two-linked-lists/description/ 题解 两个指针分别从两个链表(记录为表A,表B)的表…...
【八股文】从浏览器输入一个url到服务器的流程
1.url解析与DNS解析 浏览器解析用户输入的URL,提取协议(HTTP\HTTPS)、域名、端口及路径等信息 浏览器首先检查本地DNS缓存和系统DNS缓存,若未命中,查询本地hosts文件 最后递归查询向本地DNS服务器发起请求ÿ…...
C++和标准库速成(八)——指针、动态数组、const、constexpr和consteval
目录 1. 指针和动态数组1.1 栈和自由存储区1.2 使用指针1.3 动态分配的数组1.4 空指针常量 2. const2.1 const修饰类型2.2 const与指针2.3 使用const保护参数2.4 const方法(建议) 3. constexpr4. consteval参考 1. 指针和动态数组 动态内存允许所创建的程序具有在编…...
超声重建,3D重建 超声三维重建,三维可视化平台 UR 3D Reconstruction
1. 超声波3D重建技术的实现方法与算法 技术概述 3D超声重建是一种基于2D超声图像生成3D体积数据的技术,广泛应用于医学影像领域。通过重建和可视化三维结构,3D超声能够显著提高诊断精度和效率,同时减少医生的脑力负担。本技术文档将详细阐述…...
[HelloCTF]PHPinclude-labs超详细WP-Level 6Level 7Level 8Level 9-php://协议
由于Level 6-9 关的原理都是通用的, 这里就拿第6关举例, 其他的关卡同理 源码分析 定位到代码 isset($_GET[wrappers]) ? include("php://".$_GET[wrappers]) : ; 与前几关发生变化的就是 php:// 解题分析 这一关要求我们使用 php协议 php:// 协议 php://filte…...
【Linux】Bash是什么?怎么使用?
李升伟 整理 什么是 Bash? Bash(Bourne Again Shell)是一种 命令行解释器(Shell),广泛用于 Unix 和 Linux 操作系统。它是 Bourne Shell(sh) 的增强版,提供了更多的功能…...
cmake结合qt开发界面程序实例
在使用 CMake 构建 Qt 界面应用程序时,你需要设置 CMakeLists.txt 文件来指定项目配置、源文件、库依赖等。以下是一个简单的示例,展示了如何创建一个包含 Qt 界面(使用 QWidget)的 Qt 项目,并使用 CMake 进行构建。 …...
vue3二次封装tooltip实现el-table中的show-overflow-tooltip效果
开发过程中遇到需要根据后端返回的数据长度来判断是否需要使用el-tooltip的情况,想到el-table里面就有这种交互效果,如果不论文字是否超出容器长度都展示tooltip的话,交互效果难免会差很多,所以二次封装了这个组件: 给…...
如何创建并保存HTML文件?零基础入门教程
原文:如何创建并保存HTML文件?零基础入门教程 | w3cschool笔记 本文将以Windows系统为例,教你用最简单的记事本创建并保存第一个HTML网页。 📝 第一步:准备工具 文本编辑器:使用系统自带的记事本ÿ…...
React19源码系列之FiberRoot节点和Fiber节点
在上一篇文章,看了createRoot函数的大致流程。 createContainer函数创建并返回了FiberRoot 。FiberRoot是由createFiberRoot函数创建, createFiberRoot函数还将 FiberRoot和 根Fiber 通过current属性建立起了联系。将FiberRoot作为参数传给 ReactDOMRoo…...
每天看一篇漏洞报告
前言: 内容来源于乌云漏洞 今日思考xss漏洞, 今天看到一篇文章,里面详细说了xss的绕过技巧,虽然时间久了,没有去尝试,待会有时间去测试一下 以下是整理后的文章,原文在下面 文章链接&#…...
采用贝塞尔函数,进行恒定束宽波束形成算法
matlab采用贝塞尔函数,进行恒定束宽波束形成算法 beselle.m , 1452 20191225160928.png , 43700 20191225160935.png , 45238 20191225161010.png , 76862...
TCP协议的多线程应用、多线程下的网络编程
DAY13.2 Java核心基础 多线程下的网络编程 基于单点连接的方式,一个服务端对应一个客户端,实际运行环境中是一个服务端需要对应多个客户端 创建ServerSocketNable类,多线程接收socket对象 public class ServerSocketNable implements Run…...
华为中小型企业项目案例
实验目的(1) 熟悉华为交换机和路由器的应用场景 (2) 掌握华为交换机和路由器的配置方法 实验拓扑实验拓扑如图所示。 华为中小型企业项目案例拓扑图 实验配置市场部和技术部的配置创建VLANLSW1的配置 [LSW1]vlan batch 10 20 [LSW1]q…...
LabVIEW VI Scripting随机数波形图自动生成
通过LabVIEW VI Scripting 技术,实现从零开始编程化创建并运行一个随机数波形监测VI。核心功能包括自动化生成VI框架、添加控件与函数、配置数据流逻辑及界面布局优化,适用于批量生成测试工具、教学模板开发或复杂系统的模块化构建。通过脚本化操作&…...
MATLAB 控制系统设计与仿真 - 26
状态空间控制系统概述 状态空间描述 现代控制理论是建立在状态空间基础上的控制系统分析和设计理论,它用状态变量来刻画系统的内部特征,用‘一节微分方程组’来描述系统的动态特性。系统的状态空间模型描述了系统输入/输出与内部状态之间的关系&#x…...
Python----计算机视觉处理(Opencv:图像镜像旋转)
一、图像镜像旋转 图像的旋转是围绕一个特定点进行的,而图像的镜像旋转则是围绕坐标轴进行的。图像镜像旋转,也可 以叫做图像翻转,分为水平翻转、垂直翻转、水平垂直翻转三种。 通俗的理解为,当以图片的中垂线为x轴和y轴时&#x…...
C++从入门到入土(八)——多态的原理
目录 前言 多态的原理 动态绑定与静态绑定 虚函数表 小结 前言 在前面的文章中,我们介绍了C三大特性之一的多态,我们主要介绍了多态的构成条件,但是对于多态的原理我们探讨的是不够深入的,下面这这一篇文章,我们将…...
