主要内容:
- 通过表单演示getter/setter的一些基本操作
- $(), attr(), css(), val(), html(), text(), postion位置信息
- jQuery中的dom基本操作:append(), addClass, befere(), insertAfter(), prependTo(), replaceWith() - dom操作应该很关键,毕竟网页上的东西就是依赖dom操作来摆弄的。
- 过滤器:filter(用得不多,估计后面也越来越少), find
1. 通过一个表单进行getter/setter演练
- (这块内容其实是前一天的)
- $(), attr()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>getter / setter -1</title>
<style>
body {
display: flex;
flex-direction: column;
align-items: center;
color: #666;
}
form {
width: 400px;
/* height: 150px; */
padding: 20px 10px;
border: 1px solid #aaa;
box-shadow: 0 0 5px #888;
box-sizing: border-box;
background-color: #eee;
display: grid;
grid-template-columns: 80px 200px;
gap: 10px;
place-content: center center;
}
button {
grid-column: 2 / 3;
height: 26px;
}
button:hover {
color: white;
background-color: #888;
border: none;
cursor: pointer;
}
.red {
color: red;
}
</style>
</head>
<body>
<h2 class="red">用户登录</h2>
<form action="handle.php" method="GET"">
<label for="email">Email:</label>
<input type="email" name="email" id="email" autofocus value="leture@php.cn"/>
<label for="password">Password:</label>
<input type="password" name="password" id="password" value="不少于6位" />
<label for="confirm">记住我:</label>
<div>
<input type="radio" name="save" id="confirm" value="1" checked/>
<label for="confirm">保存</label>
<input type="radio" name="save" id="cancel" value="0" />
<label for="cancel">放弃</label>
</div>
<button>登录</button>
</form>
<script src="lib/jquery-3.5.1.js"></script>
<script>
var form = $("form");
// attr(): 获取元素的属性
// attr(name): 获取属性的值
// attr(name,value): 设置属性的值
console.log(form.attr("action"));
// 设置属性,等于从handle.php变化check.php
form.attr("action", "admin/check.php");
console.log(form.attr("action"));
// 同时设置多个属性值
form.attr({
"action": "select.php?id=10",
"method": 'Post'
});
// attr()第二个参数支持回调
// 获取当前的method属性值
// 动态设置action
// 根据请求的类型,动态设置action
// get ==> query.php?id=1
// post ==> register.php
form.attr("action", function() {
var method = $(this).attr('method').toLowerCase();
console.log(method);
// js表达式的的返回值,永远是等号右边
return (method === "get") ? 'query.php?id=1' : 'register.php'
});
</script>
</body>
</html>
2. 跟第一步差不多,getter,setter
- 表单部分一样
<script>
var form = $("form");
// console.log(form);
// css(): 设置元素的内联样式的
// css(name): getter, 获取
console.log(form.css('width'));
// 用原生的来获取非内联样式(计算样式)
var form = document.forms.item(0);
console.log(window.getComputedStyle(form,null).getPropertyValue("width")) ;
// css(name, value): setter, 设置
$('form').css('border', "3px dashed green")
// css({...}): 支持同样设置多个样式属性
$('form').css({
'border': "3px dashed blue",
'background': 'yellow'
});
// css(callback): 支持回调函数当参数
$('form').css('background-color', function (){
var bgcolors = ['plum', 'lightblue', 'tan', 'lime']; // index = [0, 3]
// Math.floor()向下取整, 3.14 = 3, 4.8 => 4
var randomIndex = Math.floor(Math.random()*bgcolors.length);
return bgcolors[randomIndex];
});
</script>
3. val()获值,修改值
<script src="../0818/lib/jquery-3.5.1.js"></script>
<script>
var form = $("form");
// val()获取表单控件value属性的值
console.log($('#email').val());
// console.log(document.querySelector('form #email').value);
// var login = document.forms.namedItem('login');
// console.log(login.email.value);
// console.log(login.password.value);
// var data = {
// email : login.email.value,
// password: login.password.value
// };
// var json = JSON.stringify(data);
// console.log(json);
var data = {
email: $('#email').val(),
password: $('#password').val(),
status: $('input:radio[name=save]:checked').val()
};
var json = JSON.stringify(data);
console.log(json);
// val(data): 用来设置
$('#email').val('zhulaoshi@qq.com');
// 返回默认邮箱
$('#email').val(function(){
return this.defaultValue;
});
</script>
4. html() / text()
- 原生对应的属性 innerHTML(可以加样式), innerText(不能加样式)
<script src="../0818/lib/jquery-3.5.1.js"></script>
<script>
var form = $("form");
// 传参就是设置setter, 不传就获取getter
console.log(document.querySelector('h2').innerText);
console.log($('h2').text());
document.querySelector('h2').innerText = '用户注册';
$('h2').text('不许注册');
document.querySelector('h2').innerText = '用户<span style="color:green">注册</span>';
document.querySelector('h2').innerHTML = '用户<span style="color:green">注册</span>';
$('h2').text('用户<span style="color:green">别注册</span>')
$('h2').html('用户<span style="color:green">别注册</span>')
</script>
5. 获得并修改位置信息
<script src="../0818/lib/jquery-3.5.1.js"></script>
<script>
var form = document.forms.item(0);
// 获取表单的位置信息
var domRect = form.getBoundingClientRect();
// console.log(domRect);
console.log(domRect.top);
console.log(domRect.left);
// jquery来获取
var position = $(form).offset();
console.log(position.top);
console.log(position.left);
position.top += 100;
console.log(position.top);
// 自定义数据属性 data-? 的获取
console.log(form.dataset.name);
// jquery的 data()
console.log($(form).data('name'));
// $(form).removeData('data-name')
console.log($(form).data('name'));
</script>
6. jQuery中常用DOM基础
- 元素的添加与算出
- 添加的位置以及属性改变
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>jQuery中常用DOM基础</title>
<style>
.active {
color: red;
}
</style>
</head>
<body>
<script src="../0818/lib/jquery-3.5.1.js"></script>
<script>
// 1. 元素的添加
// 父元素.append(子元素)
// var ol = $("<ol>");
// $("body").append(ol);
// $("body").append($("<ol>"));
$("body").append("<ol>");
// 子元素.appendTo(父元素)
$("<li>").text("笔记本电脑").appendTo("ol");
// 添加内容的时候,可又同步设置样式
$("<li>").addClass("active").text("华为手机").appendTo("ol");
// 在创建元素时,可以同步的生成属性
$("<li>", {
id: "hello",
style: "background:yellow",
})
.html('<a href="">显示器</a>')
.appendTo("ol");
// append(callback)
$("ol").append(function () {
// 动态生成一定数量的<li>
var lis = "";
for (var i = 0; i < 5; i++) {
lis += "<li>最新商品 " + (i + 1) + "</li>";
}
return lis;
});
// 从第3个元素前面添加一个<li>, 原位置上. before(新元素)
$("ol > li:nth-of-type(3)").before("<li>新新元素1</li>");
//新元素.insertAfter(原来的位置)
$("<li>新新元素2</li>").insertAfter("ol > li:nth-of-type(4)");
// prepend(), prependTo()
$('<li class="active">我是第一个元素</li>').prependTo("ol");
// 元素的替换: 要被替换掉的元素.replaceWith(新元素)
$("ol > li:last-of-type").replaceWith("<h2>太晚了, 大家要坚持</h2>");
</script>
</body>
</html>
7. 过滤器
- 过滤器现在用得不多了
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>常用过滤器</title>
</head>
<body>
<ul id="first">
<li>item1</li>
<li>item2</li>
<ul>
<li>item1</li>
<li class="red">item2</li>
<li>item3</li>
</ul>
<li>item3</li>
<li>item4</li>
<li>item5</li>
</ul>
<ul id="second">
<li>item1</li>
<li>item2</li>
<li>item3</li>
<li>item4</li>
<li>item5</li>
</ul>
<script src="../0818/lib/jquery-3.5.1.js"></script>
<script>
console.log($("ul#first")[0]);
// 过滤器: 先获取较大的范围, 再慢慢的缩小包围圈
// console.log($("ul").filter("#first")[0]);
// console.log($("ul").filter("#first").get(0).children);
// console.log($("ul").filter("#first").children());
var children = $("ul").filter("#first").children();
console.log(children[0]);
console.log(children.first().css("background", "red"));
console.log(children.last().css("background", "green"));
console.log(children.eq(2).css("background", "yellow"));
$("ul#first > li:first-of-type").css("background", "grey");
// children只限于子元素; find(),可又获取任何层级的元素
// $("ul").filter("#first").find(".red").css("background", "red");
// $("ul#first .red").css("background", "lightblue");
</script>
</body>
</html>
8. 作业
看手册, 除了掌握课堂上提及的DOM操作之外, 将未提及的一些DOM操作做下,并提交上来
查询了下,网上有这样一个blog,内容还不错:
https://www.cnblogs.com/zxt-17862802783/p/7498790.html
里面有两张图挺好的:图1-dom树
图2-常用dom方法
不过自己其实现在最关心的还是怎么结合具体的后台数据库进行这些操作,总感觉中间有一块没有搞定。
后面有时间的话,还是需要结合目前做的那个pm来进行下这块的操作。
理想的状态是
- 通过js send data,然后php中进行pdo操作,并将返回的值再encode通过json传过来。
- 还是通过cookie来进行数据交换?
貌似两种方法应该都可以实现吧。