网站首页 > 技术文章 正文
学习大纲
一、Jquery-DOM操作(二)
1.什么是DOM
DOM 全称 document object model (文档对象模型),我们可以通过操作DOM来改变HTML页面的呈现效果。
2.属性操作
1.1JS高级知识操作属性
获取指定属性的值 对象.getAttribute(属性名)
设置指定属性的值 对象.setAttribute(属性名,属性值);
移除指定属性 对象.removeAttribute(属性名);
1.2JQ动态操作属性
获取指定属性的值 $().attr(‘属性名’);
设置指定属性的值 $().attr(‘属性名’,’属性值’);
移除指定的属性 $().removeAttr(‘属性名’);
批量设置属性 $().attr(‘json对象’)
【优点】
?更加智能,一个参数代表获取,两个参数代表设置
?一次可以增加多个属性
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Jquery-DOM操作之属性操作</title>
</head>
<body>
<iframe src="http://www.baidu.com" width="500px" height="500px;" frameborder="0"></iframe>
<div id='div1'>批量增加多个属性</div>
<input type="button" value="点我" id="btn1">
</body>
<script src="../jquery-1.8.2.js"></script>
<script>
obj = document.getElementById('btn1');
obj.onclick=function(){
//获取连接
alert($('iframe').attr('src'));
//修改链接
$('iframe').attr('src','http://www.taobao.com');
//删除属性
$('iframe').removeAttr('height');
}
$('#div1').attr({'data-id':'1','php9':'真是好'});
</script>
</html>
3.样式操作
第一天我们学习了一个样式操作,$().css 类似于JS中的 对象.style.样式属性=样式值
1.1样式增加
语法:$(‘选择器’).addClass(‘样式名’)
作用:给选中的元素增加class样式属性
1.2样式删除
语法:$(‘选择器’).removeClass(‘样式名’);
作用:将选中的元素的class属性删除
1.3是否存在样式
语法:$(‘选择器’).hasClass(‘样式名称’);
作用:判断选中的元素中是否存在指定的样式
1.4样式切换
语法:$(‘选择器’).toggleClass();
作用:选中元素类属性的切换(就是在删除和增加直接切换)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Jquery-DOM样式操作</title>
</head>
<style>
.red{
background: red;
}
.width{
width: 100px;
}
.display{
display: none;
}
</style>
<body>
<div>动态增加样式red样式</div>
<input type='button' id='btn1' value='增加'/>
<input type='button' id='btn2' value='删除'/>
<input type='button' id='btn3' value='判断red是否存在'/>
<input type='button' id='btn4' value='切换样式'/>
</body>
<script src="../jquery-1.8.2.js"></script>
<script>
obj = document.getElementById('btn1');
obj2 = document.getElementById('btn2');
obj3 = document.getElementById('btn3');
obj4 = document.getElementById('btn4');
obj.onclick=function(){
$('div').addClass('red');
$('div').addClass('width');
}
obj2.onclick=function(){
$('div').removeClass('width');
}
obj3.onclick=function(){
alert($('div').hasClass('red'));
}
obj4.onclick=function(){
$('div').toggleClass('display');
}
</script>
</html>
应用场景:一般在做隐藏显示切换使用
1.5样式-尺寸
?Width 和 height
语法:$(‘选择器’).width() ;$(‘选择器’).height();
作用: 获取选定元素样式中的width/height值
?innerWidth 和 innerHeight
语法:$(‘选择器’).innerWidth(); $(‘选择器’).innerHeight()
作用:获取指定元素的总宽度/高度
说明:innerWidth=width+appding
由于元素是盒模型
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Jquery-DOM尺寸操作</title>
</head>
<style>
.div1{
background: red;
width: 200px;
height: 50px;
padding-left: 10px;
padding-bottom:
}
</style>
<body>
<div id='div1' class='div1'>设置宽度为200px高度为50px</div>
</body>
<script src="../jquery-1.8.2.js"></script>
<script>
console.log($('#div1').width());
console.log($('.div1').width());
console.log($('.div1').height());
console.log($('#div1').innerWidth());
console.log($('#div1').innerHeight());
</script>
</html>
outerWidth和outerHeight
语法:$(‘选择器’).outerWidth()/$(‘选择器’).outerHeight()
作用:获取的元素的宽度包含边框的值
说明:width = width+panding+margin+border*2
1.6样式-位置
?Offset();
语法:$(‘选择器’).offset().top/left
作用:获取当前选中的元素距离顶部/左边的像素距离
说明:相对于body的距离
?Position();
语法:$(‘选择器’).position().top/left
作用:获取相对于上级元素的像素距离
说明:相当于父级元素。
scrollTop()/scrollLeft()
语法:$(‘选择器’).scrollTop();/$(‘选择器’).scrollLeft();
作用:获取元素中滚动条的垂直便宜距离
案例:回到顶部
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Jquery-位置操作</title>
</head>
<style>
#box{
width: 1000px;
height: 2000px;
margin: 50px auto;
border: 1px solid #ccc;
position: relative;
}
#main{
width: 200px;
height: 200px;
background: #0ff;
position: absolute;
top:30px;
left: 30px;
}
</style>
<body>
<!--
<h1>定位元素位置</h1>
<hr/>
-->
<div id='box'>
<div id='main'>主题内容</div>
</div>
<div id='goTop'><a href="javascript:void(0);"> 返回到顶部</a></div>
</body>
<script src="../jquery-1.8.2.js"></script>
<script>
obj = document.getElementById('goTop');
obj.onclick = function(){
alert($('body').scrollTop(0));
}
</script>
</html>
5.文本操作
?JS中文本操作
对象.innerHtml 获取元素内容(包含html内容)
对象.innerText 获取元素内容(只包含文本)
对象.value 获取表单元素的值
?JQ中文本操作
$().html() 加参数设置内容,不加参数获取内容
$().text() 加参数设置内容,不加参数获取内容
$().val() 加参数设置值,不加参数获取值
6文档操作
通过Jquery可以实现节点的 追加、删除、修改、复制等操作
1.1节点追加
?父子关系追加
Append() 和 prepend()
语法:$(‘选择器’).append(内容)
作用:向父节点最后增加内容 最后一个子元素
语法;$(‘选择器’).prepend(内容)
作用:向父节点最前面增加内容 第一个子元素
?兄弟关系追加
After()和before()
语法:$(‘选择器’).after(内容)
作用:增加内容到父级后面
语法:$(‘选择器’).before(内容)
作用:增加内容到父级的前面
1.2节点删除
语法:$(‘选择器到节点’).remove();
作用:从文档中删除该节点
1.3节点替换
语法:$(‘要替换的节点’)replaceWith(‘内容’)
作用:指定替换节点里面的内容
1.4节点复制
语法:$(‘要复制的节点’).clone()
作用:复制选中的节点
说明clone(true/false)
默认值是false,只是复制节点,不复制事件,
True 事件也复制
二、Jquery-事件
1.什么是事件
用户通过鼠标、键盘所做的动作就是事件
事件一单发生就要有事件处理这些动作,这里的事件处理称之为“事件驱动”,事件驱动通常是由函数来担任,常见的函数
Click/dbclick/mousedown/mouseup/mouseover/
Onkeyup
Onfocus
Onblur
Onsubmit 等
2.设置事件
?原生JS设置事件
Dom1级事件
<input input=’text’ onclick=”函数()”>
对象.onclick=function(){}
Dom2级事件设置
对象.addEventListener(类型,处理,事件流)
对象.removeEventListener(‘类型’,’处理’,’事件流’);
IE8浏览器以下使用:
对象.attachEvent()
对象.detachEvent()
?Jquery设置事件
不需要考虑浏览器兼容性
语法:$(‘选择器’).事件类型(事件处理函数fn)
说明:事件类型:
3.事件绑定
语法:
$(‘选择器’).bind(‘事件类型’,事件函数fn) 绑定一种事件
$(‘选择器’).bind(‘事件类型1 事件类型2 ..’,事件处理函数fn) 一个元素绑定多个事件同一个处理操作
$(‘选择器’).bind(json对象) 一个元素绑定多个
4.加载事件
思考:为什么我将代码放到html的前面所有的事件都不生效了?
因为js程序的运行需要HTML和CSS代码的支持,但是程序是从上往下执行的,在加载html之前就执行了JS所以不会生效,那么这个时候应该怎么解决?
就要用到事件加载
【JS】中事件加载
Window.load=function(){}
【JQ】事件加载
$(document).ready(function(){
})
简化写法
$(function(){
})
5.案例-图片切换效果
?需求分析
凤凰网图片特效
图片切换效果,当鼠标移到相应的栏目显示该栏目下的图片
?实现步骤
1.栏目增加鼠标经过事件
首先引入jquery 核心库文件
获取li 标签下的index属性即可
2.根据栏目替换相应的栏目图片
?代码
<script src="../jquery-1.8.2.js"></script>
<script>
$(function(){
$('.lb ul li').mouseover(function(){
//获取唯一标示
// index = $(this).attr('index');
//替换图片
// $('#changeimg').attr('src','style/img/lb'+index+'.jpg');
index = $('.lb ul li').index(this);
$('#changeimg').attr('src','style/img/lb'+index+'.jpg');
})
})
</script>
三、Jquery-遍历操作
?each 遍历方法
语法:
$.each(数组/对象,function(){}) 遍历数组或者对象
$(‘选择器’).each(function(){}); 遍历选择器选中的元素对象
说明:参数1代表要遍历的数组或者是对象,参数二,匿名函数function(){}函数有两个形参一个是i一个是item 分别代表的是下标和值
案例1:遍历数组和对象
案例2:标签元素遍历
?parent和 parents
语法:
$(‘选择器’).parent() //匹配当前对象的父级元素(上一级)
$(‘选择器’).parents() //匹配当前对象的祖先元素(上N级)
通过对比可以发现,parents()是便利当前元素的所有父级一直往上找,找到顶为止,parent(),最近的父级元素
?next()和prev()
语法:
$(‘选择器’).next(); //匹配的是当前选中元素的兄弟元素(下一个)
$(‘选择器’).prev(); //匹配的是当前选中元素的兄弟元素(上一个)
四、案例-购物车
1.【全选和全不选】
?需求:
点击全选->勾选中所有商品
再次点击取消所有商品的选中
?分析需求:
1.给全选增加点击事件,并且点击时的状态【全选/全部选】
2.获取所有商品的input框当前的状态
3.将所有商品的input的状态修改成点击事件的那个input的状态
?代码:
<script type="text/javascript" src='../jquery-1.8.2.js'></script>
<script>
//绑定点击事件
$('#allselect').click(function(){
//获取当前是否被选中的状态
statused = $(this).is(':checked');
if(statused){
//如果是全部选中则选中所有的商品
//遍历所有input type 是checkbox
$('.gwc_tb2 :checkbox').attr('checked',true);
}else{
//如果是false则是全部取消
$('.gwc_tb2 :checkbox').attr('checked',false);
}
})
</script>
2.【反选】
?需求:
点击复选框反选->没有勾选的商品勾选,已经勾选的商品取消勾选
?分析需求:
1.给反选增加点击事件(不需要获取状态)
2.获取所有商品的当前状态(勾选或未勾选)
3.修改每个商品的状态(循环修改)
?代码:
//反选,增加点击事件
$('#fanselect').click(function(){
//获取所有的商品checkbox的对象集合
obj = $('.gwc_tb2 :checkbox');
//获取一个商品的checkbox的选中状态
// console.log(obj.eq(0).is(':checked'));
//获取有多少个checkbox
length = obj.length;
//循环改变
for(i=0;i<length;i++){
//判断当前状态,如果是勾选改为不勾选,如果是不勾选改为勾选
if(obj.eq(i).is(':checked')){
obj.eq(i).attr('checked',false);
}else{
obj.eq(i).attr('checked',true);
}
}
})
?优化版:
//反选,增加点击事件
$('#fanselect').click(function(){
//使用遍历方式
$('.gwc_tb2 :checkbox').each(function(){
if($(this).is(':checked')){
$(this).attr('checked',false);
}else{
$(this).attr('checked',true);
}
})
})
3.【增加商品】
?需求:
点击增加商品->然后增加商品到购物车列表
?分析需求:
1.给商品按钮增加点击事件
2.组合html字符串
3.将字符串追加到表格中
?代码:
//增加商品动态事件
$('#addGoods').click(function(){
//字符串拼接
Htmlstr = '<tr>';
Htmlstr +='<td class="tb2_td1"><input type="checkbox" value="1" name="newslist" id="newslist-2" /></td>';
Htmlstr+='<td class="tb2_td2"><a href="#"><img src="images/img2.jpg"/></a></td><td class="tb2_td3"><a href="#">产品标题</a></td><td class="tb1_td4">一件</td><td class="tb1_td5"><input id="min2" name="" style=" width:20px; height:18px;border:1px solid #ccc;" type="button" value="-" />';
Htmlstr+='<input id="text_box2" name="" type="text" value="1" style=" width:30px; text-align:center; border:1px solid #ccc;" /><input id="add2" name="" style=" width:20px; height:18px;border:1px solid #ccc;" type="button" value="+" /></td>';
Htmlstr+='<td class="tb1_td6"><label id="total2" class="tot" style="color:#ff5500;font-size:14px; font-weight:bold;"></label></td><td class="tb1_td7"><a href="javascript:void(0);" onclick="delgoods(this)">删除</a></td>';
Htmlstr+='</tr>'
$('.gwc_tb2 tbody').append(Htmlstr);
})
4.【删除商品】
?需求:
点击删除按钮,删除购物车商品信息
?分析需求:
1.给删除绑定点击事件
问题:绑定节点使用什么选择器?
答:使用类选择器不能使用ID选择器,ID只能选中一个元素
2.删除当前操作的节点
由于删除在td节点中,我们直接使用remove能不能删除整行呢?
不可以,我们要删除td的父节点
?代码:
//删除商品节点
function delgoods(obj){
//使用parents();
$(obj).parents('tr').remove();
}
五、Jquery-AJAX
1.什么是AJAX
所谓的ajax 就是(asynchronous javascript and xml) 的简写 ,即异步的js 和XML技术的应用,浏览器端与服务器端通讯不需要刷新页面的技术。
2.$.get
使用Jquery中的$.get可以向服务器发送get方式的ajax请求
?语法
$.get(‘url’,’data’,fn,dataType);
说明:url请求地址、data请求时发送的数据【可以是字符串,可以是json对象】,fu:请求成功后的回调函数,dataType:数据类型json、xml、html、text 类型(预定服务器返回的数据类型)
?举例
$('#btn1').click(function(){
$.get('dom.php',{'name':'ss','age':'11'},function(data){
alert(data);
},'json');
})
3.$.post
使用Jquery $.post方法可以发送post方式的ajax请求
?语法:
$.post(‘url’,’data’,fn,’dataTpye’);
说明:同上
4.$.ajax
?语法
$.ajax({//json,对象
Url://地址,
Data://传递给服务器的数据
Type:’get/post’ //发送类型
dataType:’json’,//返回的数据处理类型
Success:function(){}//ajax请求成功后的执行的函数,
Error:function(e){}// ajax请求失败后执行的函数
Async:true/fals //true异步,同步false,默认是true
})
?案例
$('#btn3').click(function(){
$.ajax({
url:'dom.php',
data:{'username':'php9'},
type:'post',
dataType:'json',
success:function(data){
console.log(data);
},
error:function(e){
console.log(e.status);
if(e.status!=200){
alert('服务器繁忙.........');
}
}
})
【PHP】
<?php
$username = $_POST['username'];
$preg = '/^[a-zA-Z][a-zA-Z0-9]+$/';
if(!preg_match($preg,$username)){
echo json_encode(array('status'=>$username,'info'=>'用户名必须是英文或者英文数子组合'));
}
echo json_encode(array('status'=>$username,'info'=>'注册成功'));
5.$.get/$.post/$.ajax区别
$.ajax就是将原始的javascript ajax进行了封装,通过这个方法能实现所有的ajax操作
$.get和$.post 就是封装的$.ajax
6.跨域【重点】
1.1什么是跨域
所谓的跨域就是从一个域名向另外的一个域名请求数据
1.2需求
Aa.com 向 bb.com 发送ajax请求
1.3通过JQ实现跨域
<script src="jquery-1.8.2.js"></script>
<script>
$('#btn1').click(function(){
$.ajax({
url:'http://bb.com/a.php',
dataType:'jsonp',
jsonp:'backfun',
data:{'username':'aa','password':'123'},
success:function(data){
alert(data.msg);
},
error:function(e){
console.log(e);
}
})
})
</script>
【http://bb.com/a.php】
$name = $_GET['backfun'];
$data = json_encode(array('status'=>'1','msg'=>'注册成功!'));
echo $name.'('.$data.')';
猜你喜欢
- 2024-09-11 浅析MySQL Join Reorder算法(mysqlinner join)
- 2024-09-11 js 小函数(js函数总结)
- 2024-09-11 Kubernetes 高性能网络组件 Calico 入门教程
- 2024-09-11 jQuery中的clone妙用(jquery.on)
- 2024-09-11 自定义一个"骚气"的jQuery
- 2024-09-11 前端单元测试以及自动化构建入门(前端单元测试是什么)
- 2024-09-11 Python全栈 Web(jQuery 一条龙服务)
- 2024-09-11 jQuery遍历说、详解与示例的结合,轻松搞定这个遍历!
- 2024-09-11 「clickhouse专栏」对标mongodb存储类JSON数据文档统计分析
- 2024-09-11 jQuery实现简易购物车功能(jquery购物车结算页面)
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)