zoukankan      html  css  js  c++  java
  • WEB开发 jQuery

     WEB开发 jQuery

    1,认识 jQuery

    jQuery速查表

    jQuery是一个快速,小巧,功能丰富的JavaScript库。它只是封装了js的dom的操作和ajax,其他的未封装。所以jQuery是js的一个子集。

    (1)write less, do more.

    核心思想:write less, do more.

    (2)为什么要使用jQuery

    在用js写代码时,会遇到一些问题:

    1,window.onload 事件有事件覆盖问题,因此只能写一个事件。

    2,代码容错性差。

    3,浏览器兼容性问题。

    4,书写繁琐,代码量多。

    5,代码很乱各个页面到处都是。

    6,东话效果很难实现。

    jQuery是全局的一个函数,当调用$()内部,会帮我们new jQuery() 创建出对象之后。对象:属性和方法。

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title></title>
    </head>
    <body>
    	<div class="box"></div>
    	// 1.引包 
    	<script type="text/javascript" src="jquery-3.3.1.js"></script>
    	//jquery是全局的一个函数,当调用$(),内部会帮咱们new jQuery(),创建出对象之后 对象:属性和方法 
    	<script type="text/javascript">
    		
    		// 自执行行数
    		(function add(){
    			return console.log(2);
    		})();
    		console.log(jQuery);
    		console.log($);  //18和19行执行结果一模一样
    		console.log($('.box'));
    	</script>
    </body>
    </html>

    (3)入口函数

    程序执行需要入口,入口函数是等待文档资源加载完成之后调用此方法

    $(document).ready(function){
        alert(1);
    });

    //等价于
    $(function(){
    $('#btn').click(function(){
    $('div').show().html('我的内容')
    })
    });

    jquery简便写法入口函数(常用):

    $(function(){
        alert(2);
    });

    表示图片资源加载完成之后调用

    $(window).ready(function(){
        // 表示图片资源加载完成之后调用
        console.log(3);
    });

    (4)(3)和window.onload()的区别

    ①DOM文档加载的步骤

    1. 解析HTML结构。
    2. 加载外部脚本和样式表文件。
    3. 解析并执行脚本代码。
    4. DOM树构建完成。
    5. 加载图片等外部文件。
    6. 页面加载完毕。

    ②执行时间不同

    window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。

    $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。

    ③编写个数不同

    window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个

    $(document).ready()可以同时编写多个,并且都可以得到执行

    ④简化写法不同

    window.onload没有简化写法

    $(document).ready(function(){})可以简写成$(function(){});

    2,jQuery与DOM对象互换

    ①jQuery对象的获取

    $(function(){
    	// 获取jquery对象
    	console.log($('#box2'));
    	});

    ②js对象的获取

    var oDiv2 = document.getElementById('box2');
    console.log(oDiv2);

    ③jquery→js对象

    console.log($('#box2')[0]);
    console.log($('#box2').get(0));

    ④js→jquery对象

    直接在$后面的括号里写js对象,$(js对象)

    console.log($(oDiv2));

    ⑤为何要相互转换对象

    jquery→js对象:因为js是包含jquery,jquery只是封装DOM事件,ajax动画,就要将jquery对象转换成js对象。

    js→jquery对象:js对象转换成jquery对象可以更简易的对DOM进行操作。

    注意:

    如果是jquery对象一定要调用jquery的属性和方法
    如果是js对象一定要调用的是js的属性和方法
    千万不要将这两个对象混淆
    在jquery中,大部分的都是api(方法), length 和索引是它的属性

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            #box2{
                 100px;
                height: 100px;
                background-color: red;
            }
        </style>
    </head>
    <body>
        <div class="box"></div>
        <div id="box2"></div>
        <script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
            
            $(function(){
                // 获取jquery对象
                console.log($('#box2'));
    
                // 获取js对象
                var oDiv2 = document.getElementById('box2');
                console.log(oDiv2);
    
                // jquery==>js对象
                console.log($('#box2')[0]);
                console.log($('#box2').get(0));
    
                // js对象==>jquery对象 $(js对象)
                console.log($(oDiv2));
    
            });
        </script>
    </body>
    </html>
    整体代码示例

    3,jQuery如何操作DOM(125)

    事件三步走:事件源,事件,事件驱动程序

    jquery通过选择器来操作DOM

    (1)基本选择器(标签,类,id)

    ①标签选择器

    <div class="box">qiuma/div>
    <div id="box">日天</div>
    <div>qiumawu</div>
    <script type="text/javascript" src="jquery-3.3.1.js"></script>
    <script type="text/javascript">
        $(function(){
        console.log($('div'));  //标签选择器
    
        // js对象
        // $('div')[0].onclick
    
        // jquery内部自己遍历 
        $('div').click(function(){
    
            // this指的是js对象
            console.log(this.innerText);  //此处this是js对象
            console.log($(this).text())  //此处this已经转换成jquery对象了,获取的text文本内容(.text()内部封装就是innerText)
        });

    ②类选择器

    console.log($('.box'))

    ③ id选择器                                                                               

    console.log($('#box'))

    (2)层级选择器(后代子代)

    四种选择器:(使用最多的还是后代选择器和子代选择器)

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title></title>
    </head>
    <body>
    	<ul class="lists">
    		<li>
    			女友
    			<ol>
    			    <li>alex</li>
    			</ol>
    		</li>
    		<li class="item">
    			<a href="#">alex2</a>
    		</li>
    		<li class="item2">wusir</li>
    		<li>日天</li>
    		<li>村长</li>
    		<li>小马哥</li>
    	</ul>
    	<script type="text/javascript" src="jquery-3.3.1.js"></script>
    	<script type="text/javascript">
    		
    		$(function(){
    			// 空格 后代选择器  修改 样式属性
    			$('.lists li').css('color','red');
    			// > 子代选择器 亲儿子
    			$('.item>a').css({
    				'color':'yellow',
    				'background-color':'blue'
    			});
    
    			// + 紧邻  只选中挨着最近的兄弟
    			$('.item + li').css('color','green');
    
    			// ~ 兄弟选择器
    			$('.item2~li').css('color','purple');
    		});
    	</script>
    </body>
    </html>

    效果图

    (3)基本过滤选择器  :eq(index)

    解释:

    :eq(index)是最常用的

    示例代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title></title>
    </head>
    <body>
    	<ul>
    	    <li>1</li>
    	    <li>2</li>
    	    <li>3</li>
    	    <li>4</li>
    	</ul>
    	<script type="text/javascript" src="jquery-3.3.1.js"></script>
    	<script type="text/javascript">
    		
    		$(function(){
    			// 写法 $('ul li:eq(0)')
    			// 1.:eq(index) 选择序号为index的元素
    			$('ul li:eq(0)').css('background','red');
    			$('ul li:gt(0)').css('color','green');
    			$('ul li:lt(3)').css('color','yellow');
    			// 选取的奇数和偶数(索引的奇偶)
    			$('ul li:odd').css('background','black');
    			$('ul li:even').css('background','green');
    			// 选取第一个和最后一个
    			$('ul li:first').css('background','red');
    			$('ul li:last').css('background','red');
    		});
    	</script>
    </body>
    </html>

    效果图:

    (4)属性选择器$("a[href = 'qiuma']")

    最常用:$("a[href = 'qiuma']")

    示例代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title></title>
    </head>
    <body>
    	<form>
    		<input type="text" name="">
    		<input type="password" name="">
    
    	</form>
    	<script type="text/javascript" src="jquery-3.3.1.js"></script>
    	<script type="text/javascript">
    		
    		$(function(){
    			// 属性选择器
    			$('input[type=text]').css('background','red');
    			$('input[type=password]').css('background','green');
    		});
    	</script>
    </body>
    </html>

    更详细代码

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
             <div id="box">
                <h2 class="title">属性元素器</h2>
                <!--<p class="p1">我是一个段落</p>-->
                <ul>
                    <li id="li1">分手应该体面</li>
                    <li class="what" id="li2">分手应该体面</li>
                    <li class="what">分手应该体面</li>
                    <li class="heihei">分手应该体面</li>
    
                </ul>
    
                <form action="" method="post">
    
                    <input name="username" type='text' value="1" checked="checked" />
                    <input name="username1111" type='text' value="1" />
                    <input name="username2222" type='text' value="1" />
                    <input name="username3333" type='text' value="1" />
                    <button class="btn-default">按钮1</button>
                    <button class="btn-info">按钮1</button>
                    <button class="btn-success">按钮1</button>
                    <button class="btn-danger">按钮1</button>
    
    
                </form>
            </div>
        </body>
        <script src="jquery-3.2.1.js"></script>
        <script type="text/javascript">
            
            $(function(){
                //标签名[属性名] 查找所有含有id属性的该标签名的元素
                $('li[id]').css('color','red');
                
                //匹配给定的属性是what值得元素
                $('li[class=what]').css('font-size','30px');
                //[attr!=value] 匹配所有不含有指定的属性,或者属性不等于特定值的元素
                $('li[class!=what]').css('font-size','50px');
                
                //匹配给定的属性是以某些值开始的元素
                $('input[name^=username]').css('background','gray');
                //匹配给定的属性是以某些值结尾的元素
                $('input[name$=222]').css('background','greenyellow');
                
                //匹配给定的属性是以包含某些值的元素
                $('button[class*=btn]').css('background','red')
            
                
            })
        
        </script>
    </html>
    代码示例

    (5)筛选选择器

     ①find, chidlren, parent, eq

    <body>
    	<div class="box">
    		<p>
    			<span class="child">alex</span>
    		</p>
    		<p>
    			<span class="active">alex2</span>
    		</p>
    		<p class="item3">alex3</p>
    		<p>alex4</p>
    		<p>alex5</p>
    		<div class="child">哈哈哈哈哈</div>
    	</div>
    	<script type="text/javascript" src="jquery-3.3.1.js"></script>
    	<script type="text/javascript">
    		
    		$(function(){
    
    			// find(selector)
    			// 查找后代 包括子子孙孙
    			$('.box').find('p').css('color','red');
    			$('.box').find('.item3').css('color','green');
    
    			//   在jquery中 叫链式编程  就因为有这个链式编程 所有我们书写的就少
    			$('.box').find('p>.active').css('color','yellow').click(function() {
    				alert($(this).text());
    			});
    			console.log($('.box').find('p>.active').css('color','yellow'))
    			console.log($('.box').find('p'));
    
    			// 子代children(selector) 获取的是亲儿子
    			$('.box').children('.child').css('color','purple');
    
    			// parent  不说了 获取的是亲爹	
    
    			// eq(index) index是从0 开始的
    
    			$('.box').children('p').eq(1).css('font-size',30);
    
    		});
    	</script>
    </body>

     ②siblings

    代码示例:设计选项卡,当点击一个按钮时,只有一个颜色变了,其他变回原来的颜色。

    简单选项卡案例

    主要代码:

    $(function(){
    	// 内部遍历
    	$('button').click(function(event) {
    		// 选项卡 当前的this指的是js对象,$(this)指的是jquery对象
    	    $(this).css('background','red').siblings('button').css('background','transparent');//transparent透明色
    		console.log($(this).css('background','red'));
    	});
    });

    选项卡深入代码案例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                padding: 0;
                margin: 0;
            }
            ul{
                 400px;
                height: 100px;
                overflow: hidden;
            }
            ul li{
                list-style: none;
                float: left;
                 80px;
                height: 100px;
                line-height: 100px;
                text-align: center;
                background-color: red;
                margin-right: 10px;
    
            }
            ul li a{
                padding: 20px;
                /*background-color: green;*/
                color:#fff;
            }
            p{
                display: none;
            }
            p.active{
                display: block;
            }
        </style>
    <body>
        <ul>
            <li>
                <a href="javascript:void(0)">
                    alex1
                </a>
            </li>
            <li>
                <a href="javascript:void(0)">
                    alex2
                </a>
            </li>
            <li>
                <a href="javascript:void(0)">
                    alex3
                </a>
            </li>
            <li>
                <a href="javascript:void(0)">
                    alex4
                </a>
            </li>
        </ul>
        <p>alex1</p>
        <p>alex2</p>
        <p>alex3</p>
        <p>alex4</p>
    
        <script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
            $(function(){
                $('ul li a').click(function() {
                    // 选项卡的完整版
                    $(this).css('background','green').parent('li').siblings('li').find('a').css('background','transparent');
    
                    // 得获取到点击的 dom的索引 通过 index()方法获取  注意 这个要找的是有兄弟元素的索引
                    var i = $(this).parent('li').index();
                    // addClass()  removeClass()
                    $('p').eq(i).addClass('active').siblings('p').removeClass('active');
                });
            })
        </script>
        
        
    </body>
    </html>
    选项卡代码案例深入

    4,jQuery的动画效果

    1,基本的动画效果(显示隐藏)

    ①显示动画

     show(动画的时间,fn)

    显示动画的效果:默认是normal(400ms) slow(600ms) fast(200ms)

    ②隐藏动画

    hide(动画的时间, fn)

    ③开关式的显示隐藏动画

    toggle

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title></title>
    	<style type="text/css">
    		.box{
    			 200px;
    			height: 200px;
    			background-color:red;
    			display: none;
    		}
    	</style>
    </head>
    <body>
    	<button id="show">显示</button>
    	<button id="hide">隐藏</button>
    	<button id="toggle">开关式动画</button>
    	<div class="box"></div>
    	<script type="text/javascript" src="jquery-3.3.1.js"></script>
    	<script type="text/javascript">
    		$(function(){
    			// 显示动画
    			$('#show').click(function(){
    				// 如果是一个按钮控制盒子显示隐藏 那么得需要去控制isShow这个变量
    
    				// show(动画的时间,fn)   
    				// 显示动画的效果:默认是normal(400ms) slow(600ms) fast(200ms)
    				$('.box').show(2000,function(){
    					$(this).text('qiuma');
    				});
    
    			});
    			// 隐藏
    			$('#hide').click(function(){
    
    				$('.box').hide('fast');
    
    			});
    
    			// 开关式的显示隐藏动画
    			$('#toggle').click(function(){
    				// 玩动画 就跟玩定时器一样  先关动画 再开动画
    				$('.box').stop().toggle(2000);
    			})
    		});
    	</script>
    </body>
    </html>

    2,卷帘门动画效果(划入划出)

    划出动画: 

    $(selector).slideUp(speed, 回调函数)

    划出动画: 

     $(selector).slideToggle(speed, 回调函数);

    开关式划入划出动画: toggleSlide

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
        .box {
             200px;
            height: 200px;
            background-color: red;
            display: none;
        }
        </style>
    </head>
    
    <body>
        <button id="slideDown">卷帘门下拉</button>
        <button id="slideUp">卷帘门下拉</button>
        <button id="toggleSlide">开关式动画</button>
        <div class="box"></div>
        <script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
        $(function() {
            // 显示动画
            $('#slideDown').click(function() {
            		$('.box').slideDown(200);
    
            });
            // 隐藏
            $('#slideUp').click(function() {
    
         		$('.box').slideUp(200);
    
            });
    
            // 开关式的显示隐藏动画
            $('#toggleSlide').click(function() {
              	$('.box').stop().slideToggle(100);
            })
        });
        </script>
    </body>
    
    </html>

    3,淡入淡出

    淡入:fadeIn

    淡出:fadeOut

    开关式淡入淡出:fadeToggle

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
        .box {
             200px;
            height: 200px;
            background-color: red;
            display: none;
        }
        </style>
    </head>
    
    <body>
        <button id="fadeIn">淡入动画</button>
        <button id="fadeOut">淡出动画</button>
        <button id="fadeToggle">开关式动画</button>
        <div class="box"></div>
        <script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
        $(function() {
            // 显示动画
            $('#fadeIn').click(function() {
            		$('.box').fadeIn(1000);
    
            });
            // 隐藏
            $('#fadeOut').click(function() {
                    // 第二个参数都是有回调函数
         		$('.box').fadeOut(1000);
            });
    
            // 开关式的显示隐藏动画
            $('#fadeToggle').click(function() {
              	$('.box').stop().fadeToggle(1000);
            })
        });
        </script>
    </body>
    
    </html>

    4,自定义动画

    通过animate放置一些队列,让这些队列自己去改变属性,控制时间来改变动画

    语法:

    $(selector).animate({params}, speed, callback);

    作用:执行一组CSS属性的自定义动画。

    • 第一个参数表示:要执行动画的CSS属性(必选)

    • 第二个参数表示:执行动画时长(可选)

    • 第三个参数表示:动画执行完后,立即执行的回调函数(可选)

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title></title>
    	<style type="text/css">
    		div{
    			 100px;
    			height: 100px;
    			background-color: red;
    			position: absolute;
    			bottom: 0;
    			left: 0;
    		}
    	</style>
    </head>
    <body>
    	
    	<div></div>
    	<button>动画吧</button>
    	<script type="text/javascript" src="jquery-3.3.1.js"></script>
    	<script type="text/javascript">
    		
    		$(function(){
    				$('button').click(function(event) {
    					/* Act on the event */
    					// animate({队列的属性},时间,fn)
    						var  json = {
    							200,
    							height: 200,
    							top: 200,
    							left : 500,
    							"border-radius":200
    							
    						};
    						var json2 = {
    							 0,
    							height: 0,
    							top: 10,
    							left: 1000
    						};
    
    						$('div').stop().animate(json,2000,function(){
    							$('div').stop().animate(json2,1000,function(){
    								alert('已添加购物车')
    							})
    						});
    				});
    				
    		});
    	</script>
    	
    </body>
    </html>

    5,下拉菜单

    鼠标悬浮,自动下拉菜单

    利用mouseenter(鼠标进入)和mouseleave(鼠标离开)来完成该动作

    ①部分代码示例:

    <script src="./jquery-3.3.1.js"></script>
    <script>
        //入口函数
        $(function () {
            //需求:鼠标放入一级li中,让他里面的ul显示。移开隐藏。
            var jqli = $(".wrap>ul>li");
    
            //绑定事件  mouseenter 鼠标进入 mouseleave  鼠标离开
            // js  onmouseover 鼠标划入  onmouseout  鼠标离开
            jqli.mouseenter(function () {
                $(this).children("ul").stop().slideDown(1000);
            });
            //绑定事件(移开隐藏)
            jqli.mouseleave(function () {
                $(this).children("ul").stop().slideUp(1000);
            });
        });
    </script>

    ②全部代码示例:

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
    
            ul {
                list-style: none;
            }
    
            .wrap {
                 330px;
                height: 30px;
                margin: 100px auto 0;
                padding-left: 10px;
                background-color: pink;
            }
    
            .wrap li {
                background-color: green;
            }
    
            .wrap > ul > li {
                float: left;
                margin-right: 10px;
                position: relative;
            }
    
            .wrap a {
                display: block;
                height: 30px;
                 100px;
                text-decoration: none;
                color: #000;
                line-height: 30px;
                text-align: center;
            }
    
            .wrap li ul {
                position: absolute;
                top: 30px;
                display: none;
            }
        </style>
      
    
    </head>
    <body>
    <div class="wrap">
        <ul>
            <li>
                <a href="javascript:void(0);">一级菜单1</a>
                <ul>
                    <li><a href="javascript:void(0);">二级菜单2</a></li>
                    <li><a href="javascript:void(0);">二级菜单3</a></li>
                    <li><a href="javascript:void(0);">二级菜单4</a></li>
                </ul>
            </li>
            <li>
                <a href="javascript:void(0);">二级菜单1</a>
                <ul>
                    <li><a href="javascript:void(0);">二级菜单2</a></li>
                    <li><a href="javascript:void(0);">二级菜单3</a></li>
                    <li><a href="javascript:void(0);">二级菜单4</a></li>
                </ul>
            </li>
            <li>
                <a href="javascript:void(0);">三级菜单1</a>
                <ul>
                    <li><a href="javascript:void(0);">三级菜单2</a></li>
                    <li><a href="javascript:void(0);">三级菜单3</a></li>
                    <li><a href="javascript:void(0);">三级菜单4</a></li>
                </ul>
            </li>
        </ul>
    </div>
    
      <script src="./jquery-3.3.1.js"></script>
        <script>
            //入口函数
            $(function () {
                //需求:鼠标放入一级li中,让他里面的ul显示。移开隐藏。
                var jqli = $(".wrap>ul>li");
    
                //绑定事件  mouseenter 鼠标进入 mouseleave  鼠标离开
                // js  onmouseover 鼠标划入  onmouseout  鼠标离开
                jqli.mouseenter(function () {
                    $(this).children("ul").stop().slideDown(1000);
                });
                //绑定事件(移开隐藏)
                jqli.mouseleave(function () {
                    $(this).children("ul").stop().slideUp(1000);
                });
            });
        </script>
    </body>
    </html>
    全部代码示例

    5,jQuery的属性操作:

    jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作

    1. html属性操作:是对html文档中的属性进行读取,设置和移除操作。比如attr()、removeAttr()
    2. DOM对象属性操作:对DOM元素的属性进行读取,设置和移除操作。比如prop()、removeProp()
    3. 类样式操作:是指对DOM属性className进行添加,移除操作。比如addClass()、removeClass()、toggleClass()
    4. 值操作:是对DOM属性value进行读取和设置操作。比如html()、text()、val()

    1,jQuery标签的属性操作 attr()

    ①js中对标签属性进行操作:

    setAttribute(key,value)   //设置标签属性
    getAttribute()  //获取标签属性
    removeAttribute(name: DOMString)  //移除标签属性

    ②attr() 设置和获取标签的属性

    进行属性的获取和设置

    $('div').attr('title');  //获取值
    $('div').attr('id','box');  //设置值
    

    注意:

    attr() 中当有一个参数时,表示获取属性值。

    此外,不建议使用此方式设置类名  

    $('div').attr('class','box1 box2');

    可以通过attr()方法同时设置多个值:

    $('a').attr({
    	"href":"http://www.baidu.com",
    	title:'哈哈哈哈'
    });

    ③removeAttr()  移除标签的属性

    $('div').removeAttr('title id');

    ④全部示例代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            div{
                 100px;
                height: 100px;
                background-color: yellow;
            }
        </style>
    </head>
    <body>
        <div title = 'alex' class="active"></div>
        <!-- <img src="" alt=""> -->
        <a href="">百度一下</a>
        <!-- <input type="text" name="" value="" placeholder="" id="" > -->
        <script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
            $(function(){
    
                // attr() 有一个参数表示获取属性值
                //获取值
                console.log($('div').attr('title'));
                //设置值
                $('div').attr('id','box');
    
                // 设属性的时候 不建议使用此方式来设置类名(类操作中有类似方式)
                // $('div').attr('class','box1 box2');
    
                $('a').attr({
                    "href":"http://www.baidu.com",
                    title:'哈哈哈哈'
                });
    
                // 移除标签的属性
                $('div').removeAttr('title id');
            });
        </script>
    </body>
    </html>
    标签属性示例代码

    2,DOM对象属性操作 prop()

    对DOM元素的属性进行读取,设置和移除操作。比如prop()、removeProp()

    ①prop()

    prop() 方法设置或返回被选元素的属性和值。

    当该方法用于返回属性值时,则返回第一个匹配元素的值。

    当该方法用于设置属性值时,则为匹配元素集合设置一个或多个属性/值对。

    语法:

    返回属性的值:

    $(selector).prop(property)

    设置属性和值:

    $(selector).prop(property,value)

    设置多个属性和值:

    $(selector).prop({property:value, property:value,...})

    如果和后端数据库交互的时候,储存的是男和女这种反列性比较少的,就可以用prop方法

    ②removeProp()

     移除,类似prop方法

    ③DOM对象属性操作详细代码示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <input type="radio" name="sex" checked ><input type="radio" name="sex"><script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
            // prop() removeProp()
    
            $(function(){
    
                // js对input单选按钮checked的默认设置,这种方法对于后台数据库的交互不是很友好
                // console.log($('input[type = radio]').attr('checked')); //checked
                // 使用prop返回的是true或者false,利于交互。
                var oInput = document.getElementsByTagName('input')[0]; //0表示true
                console.dir(oInput);
                console.log($('input[type=radio]').eq(0).prop('checked'));  //prop获取当前DOM对象的属性
                $('input[type=radio]').eq(0).prop('aaaaa','11121111');  //设置
    
                // console.log($('input[type=radio]').eq(0))
    
                $('input[type=radio]').eq(0).removeProp('aaaaa');
                console.log($('input[type=radio]').eq(0))
    
            });
        </script>
        
    </body>
    </html>
    DOM对象属性操作代码示例 prop&removeProp

    ④关于attr()和prop()的区别

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body><input type="radio" id='test' name="sex"  checked/>
        女<input type="radio" id='test2' name="sex" />
        <button>提交</button>
    
        <script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
            $(function(){
                //获取第一个input
                var el = $('input').first();
                //undefined  因为attr是获取的这个对象属性节点的值,很显然此时没有这个属性节点,自然输出undefined
                console.log(el.attr('style'));
                // 输出CSSStyleDeclaration对象,对于一个DOM对象,是具有原生的style对象属性的,所以输出了style对象
                console.log(el.prop('style'));
                console.log(document.getElementById('test').style);
    
                $('button').click(function(){
                    alert(el.prop("checked") ? "男":"女");
                })
    
            })
        </script>
        
    </body>
    </html>
    关于attr()以及prop()的区别代码示例

    ⑤什么时候使用attr(),什么时候使用prop()?

    1.是有true,false两个属性使用prop();

    2.其他则使用attr();

    3,jQuery对类样式的操作 addClass()

    ①addClass(添加多个类名)

    为每个匹配的元素添加指定的类名。

    $('div').addClass("box");//追加一个类名到原有的类名

    还可以为匹配的元素添加多个类名

    $('div').addClass("box box2");//追加多个类名

    ②removeClass

    从所有匹配的元素中删除全部或者指定的类。

     移除指定的类(一个或多个)

    $('div').removeClass('box');

    移除全部的类

    $('div').removeClass();

    可以通过添加删除类名,来实现元素的显示隐藏

    代码如下:

    var tag  = false;
            $('span').click(function(){
                if(tag){
                    $('span').removeClass('active')
                    tag=false;
                }else{
                    $('span').addClass('active')
                    tag=true;
                }    
    })

    ③toggleClass

    如果存在(不存在)就删除(添加)一个类。

    语法:toggleClass('box')

    $('span').click(function(){
        //动态的切换class类名为active
        $(this).toggleClass('active')
    })

    ④案例代码示例(盒子显示隐藏)

    1,通过控制类样式属性对盒子显示隐藏

    2,通过控制类名addClass() 以及 removeClass()来对类样式进行操作

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .box{
                 200px;
                height: 200px;
                background-color: red;
            }
            .hidden{
                display: none;
            }
        </style>
    </head>
    <body>
        <button id="btn">隐藏</button>
        <div class="box"></div>
        <script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
            $(function(){
                var isShow = true;
                $('#btn').click(function(){
    
                    /*
                    1.通过控制类样式属性对盒子显示隐藏
                    if (isShow) {
                        $('.box').css('display','none');
                        isShow = false;
                        $(this).text('显示');
                    }else{
                        $('.box').css('display','block');
                        isShow = true;
                        $(this).text('隐藏');
                    }
    
    
                    */
                    // 2.通过控制类名  addClass() removeClass()
                    // 记住 如果是操作类名  一定要使用addClass 和removeClass 不要使用attr()
                    if (isShow) {
                        // className +=' hidden'
                        $('.box').addClass('hidden active yyy uuu ooo ppp');  //可以添加多个类名
                        isShow = false;
                        $(this).text('显示');
                    }else{
                        $('.box').removeClass('hidden yyy uuu ooo ppp');
                        isShow = true;
                        $(this).text('隐藏');
                    }
                })
            });
        </script>
    </body>
    </html>
    控制泪眼是属性和控制类名对盒子显示隐藏代码示例

    4,对值的操作

    ①text()

    获取值:

    只获取匹配元素包含的文本内容

    $('#box').text().trim();  //trim()为清除前后的空格

    设置值:

    设置该所有的文本内容

    $('#box').text('<a href="https://www.baidu.com">百度一下</a>');

    注意:值为标签的时候,不会被渲染为标签元素,只会被当做值渲染到浏览器中,比如加一个<h2></h2>,这个标签元素也会被渲染到浏览器中

    ②html()

    获取值:

    html() 是获取选中标签元素中所有的内容

    $('#box').html();

    设置值:

    设置该元素的所有内容,会替换掉标签中原来的内容

    $('#box').html('<a href="https://www.baidu.com">百度一下</a>');

    ③val()

    获取值:

    val()用于表单控件中获取值,比如input textarea select等等

    设置值:

    $('input').val('设置了表单控件中的值');

    ④值的操作代码示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <p id="box">
            wusir
        </p>
        <div class="box">
            女盆友
            <span>alex</span>
        </div>
        <input type="text" value="123">
        <script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
            $(function(){
                //text()
                //只获取文本的内容  text() innerText
                // trim()清除前后的空格
                // console.log($('#box').text().trim());
                
                // 设置文本的内容
                // $('#box').text('<h2>武sir 女朋友</h2>');
                
                //html()
                // 获取标签和文本的内容 html() innerHTML
                // console.log($('.box').html().trim());
                // 设置
                // $('.box').html('<h2>我女朋友呢</h2>');
                
                // val()         value
                console.log($('input').val());
                // 清空input输入框中的内容
                $('input').val('');
    
                $('input').val('哈哈哈哈');
            });
        </script>
    </body>
    </html>
    值的操作代码示例

    5,使用jQuery操作input的value值

    我们在使用jquery方法操作表单控件的方法:

    $(selector).val()//设置值和获取值

    看如下HTML结构:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <form action="">
                <input type="radio" name="sex"  value="112" />男
                <!-- 设置cheked属性表示选中当前选项 -->
                <input type="radio" name="sex"  value="11" checked="" />女
                <input type="radio" name="sex"  value="11" />gay
    
                <input type="checkbox" value="a" checked=""/>吃饭
                <input type="checkbox" value="b" />睡觉
                <input type="checkbox" value="c" checked=""/>打豆豆
        
        <!-- 下拉列表 option标签内设置selected属性 表示选中当前 -->
                <select name="timespan" id="timespan" class="Wdate"   >  
                    <option value="1">8:00-8:30</option>  
                    <option value="2" selected="">8:30-9:00</option>  
                    <option value="3">9:00-9:30</option>  
                </select>  
                <input type="text" name="" id="" value="111" />
        </form>
        
    </body>
    </html>

    页面展示效果:

    操作表单控件代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title></title>
    </head>
    <body>
    	<form>
            <!-- 设置checked属性表示选中当前选项 -->
    		男<input type="radio" name="sex">
    		女<input type="radio" name="sex">
    
            <!-- 下拉列表 option标签内设置selected属性 表示选中当前 -->
    		<select>
    			<option>alex</option>
    			<option>wusir</option>
    			<option selected="">黑girl</option>
    		</select>
    
    	</form>
    	<script type="text/javascript" src="jquery-3.3.1.js"></script>
    	<script type="text/javascript">
    		
    		$(function(){
    			// 原生js  onchange
    			// jquery  change()
    
            //单选框
    			// 设置值 加载页面时默认选中第一个
    			$('input[type=radio]').eq(0).attr('checked',true);
    
    			$('input[type=radio]').change(function(){
    				alert(1);
    			    // 1,获取单选框被选中的value值
    				console.log($(this).val());
    				console.log($('input[type=radio]:checked').val()); //和上行代码相等
                    // 2,获取复选框被选中的value值,获取的是第一个被选中的值
                    console.log($('input[type=checkbox]:checked').val());
    			});
    
    		// 下拉菜单
    			// 加载页面时 获取值
    			console.log($('select option:selected').text());
    			// 加载页面时 获取选中项的索引
    			console.dir($('select').get(0).selectedIndex);
    
    			// 设置select 的值
    
    			// 加载页面时 设置第二个当做选中值
    			// $('select option').get(1).selected = true;
    
    			// selectedIndex是select对象的属性,所以下面只能用select
    			// $('select').get(0).selectedIndex = 0;
    			// index() 只读的,不能使用这个方法来设置值
    			console.log($('select option:selected').index());
    			$('select').change(function(){
    
    				// 1.获取选中项的值
    				console.log($('select option:selected').text());  //可以放在前面
    
    				// 2.获取选中项的值
    				console.log($('select').find('option:selected').text());
    
    				// 3.获取选中项的索引   $('select').get(0) 将jquery对象转化 js对象 
    				console.log($('select').get(0).selectedIndex);
    				console.log($('select option:selected').index());
    
    			});
    		});
    	</script>
    </body>
    </html>

    另一个代码示例;

    <script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
            
            $(function(){
                // 一、获取值
                    //1.获取单选框被选中的value值
                    console.log($('input[type=radio]:checked').val())
    
                    //2.复选框被选中的value,获取的是第一个被选中的值
                    console.log($('input[type=checkbox]:checked').val())
    
                    //3.下拉列表被选中的值
    
                    var obj = $("#timespan option:selected");
                    // 获取被选中的值
                    var  time  = obj.val();  
                    console.log(time);
                    // 获取文本
                    var  time_text  = obj.text();  
                    console.log("val:"+time+" text"+ time_text );
    
                    //4.获取文本框的value值
                    console.log($("input[type=text]").val())//获取文本框中的值
    
                    // 二.设置值
                    //1.设置单选按钮和多选按钮被选中项
                    $('input[type=radio]').val(['112']);
                    $('input[type=checkbox]').val(['a','b']);
    
    
                    //2.设置下拉列表框的选中值,必须使用select
                    /*因为option只能设置单个值,当给select标签设置multiple。
                    那么我们设置多个值,就没有办法了,但是使用select设置单个值和多个值都可以
                    */
                    $('select').val(['3','2'])
    
              
                    //3.设置文本框的value值
                    $('input[type=text]').val('试试就试试')
    
    
    
    
            })
        
        </script>
    代码示例

    6,jQuery的文档操作(重点)

    就像对于元素的显示隐藏,如果频繁使用,建议使用display可控制DOM和block,如果不是频繁使用,建议使用这种方式。

     ㈠插入操作

    ⑴父子之间

    ①父元素.append(子元素);

    解释:追加某元素,在父元素中添加新的子元素。子元素可以为:stirng,jsDOM对象,jquery对象

    $(function(){
    		var oP = document.createElement('p');
    		oP.innerText = '女朋友';
    		// 父.append(子)
    
    	        $('.box').append('alex'); //可以插入普通的文本
    		$('.box').append('<h2>alex</h2>'); //可以插入标签+文本
                    $('.box').append(oP); //插入一个jsDom对象
                    $('.box').append($('.wusir'));  //如果插入的是一个jquery对象 相当于是一个移动操作
    		});
    	</script>
    </body>
    </html>

    如果插入的是一个jquery对象,只是相当于一个移动操作。

    ②子元素.appendTo(父元素);

    解释:追加某元素。子元素添加到父元素

    $('<p>日天</p>').appendTo('.box').click(function(event) {  //这里直接创建了一个日天的jquery对象
    	$(this).css({
    		100,
    		height:100,
    		backgroundColor:'red'
    	}).text('wusir');
    });

    完整代码示例:(父.append(子),子.appendTo(父))

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div class="wusir">wusir</div>
        <div class="box">
            
        </div>
    
        
        <script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
            
            $(function(){
                var oP = document.createElement('p');
                oP.innerText = '女朋友';
                oP.id = 'tt';
                // 1.父子之间 父.append(子)  子.appendTo(父)
    
                /*
                // 子元素 : 可以是 一个string  、jsDOM对象 、jquery对象
                $('.box').append('alex');//可以插入普通的文本
                $('.box').append('<h2>alex</h2>');//可以插入标签+文本
                $('.box').append(oP); //插入一个jsDom对象
                $('.box').append($('.wusir')); //如果插入的是一个jquery对象 相当于是一个移动操作
                */
    
    
                /*
                //使用此方法调用比较繁琐,可以直接使用下列方法调用,操作更简单
                $('.box').append(oP);
                console.log($('#tt'));
                $('#tt').click(function(){
    
                    alert($(this).text());
                })
                */
    
                // jquery有链式编程 简化我们的代码
                $('<p>日天</p>').appendTo('.box').click(function(event) {  //这里直接创建了一个日天的jquery对象
                    $(this).css({
                        100,
                        height:100,
                        backgroundColor:'red'
                    }).text('wusir');
                });
            });
        </script>
        
    </body>
    </html>
    完整代码示例

    ③父元素.prepend(子元素)   子元素.prependTo(父元素);

    prepend:前置添加,子元素添加到父元素的第一个位置。

    prependTo:后置添加,第一个元素添加到父元素中

    $('ul').prepend('<li>我是第一个</li>');
    $('<a href="#">qiuma</a>').prependTo('ul');

    再例如:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <ul>
            <li>alex</li>
        </ul>
        <script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
            $(function(){
                // prepend()   prependTo()
                //1. prepend() 插入 子级的第一个元素
                $('ul').prepend('<li>wusir</li>');
                $('<li>村长</li>').prependTo('ul').click(function() {
                    alert(this.innerText);  //innerText这里是属性
                });
            });
        </script>
    </body>
    </html>
    代码示例

     ⑵兄弟之间

    es6的模板字符串,使用tab键上面那个符号,反引号 ·· ,可插入整体结构进来。使用  ${变量名}  来进行变量的插入。

    语法:

    //语法一:在匹配的元素之后插入内容
    兄弟元素.after(要插入的兄弟元素);
    要插入的兄弟元素.inserAfter(兄弟元素);
    
    //语法二:在匹配的元素之前插入内容
    兄弟元素.before(要插入的兄弟元素);
    要插入的兄弟元素.inserBefore(兄弟元素);

    代码示例: 

    $('ul').after('<h4>我是一个h3标题</h4>')
    $('<h5>我是一个h2标题</h5>').insertAfter('ul')
    
    $('ul').before('<h3>我是一个h3标题</h3>')
    $('<h2>我是一个h2标题</h2>').insertBefore('ul')

    综合代码示例:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    
    <body>
        <ul>
            <li class="item">alex</li>
        </ul>
        <script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
        $(function() {
            //after
            // es6的模板字符串   tab键 上面那个符号  反引号 ``,使用${变量名} 插入变量
            var title = "百度一下";
            $('.item').after(`<li>
                <a href="#">${title}</a>
            </li>`);
    
        $('<li>wusir</li>').insertAfter('.item');
    
        // before
             $('.item').before(`<li>
                    <a href="#">${title}</a>
                </li>`);
             $('<li>wusir</li>').insertBefore('.item');
            });
        </script>
    </body>
    
    </html>
    after insertAfter before insertBefore

     ㈡替换操作

    ①页面中获取的DOM对象.replaceWith(替换的内容)

    语法:

    $(selector).replaceWith(content);

    将所有匹配的元素替换成指定的string、js对象、jquery对象。

    //将所有的h5标题替换为a标签
    $('h5').replaceWith('<a href="#">hello world</a>')
    //将所有h5标题标签替换成id为app的dom元素
    $('h5').replaceWith($('#app'));
    

    ②替换的内容.replaceALL(页面中获取的DOM对象)

    语法:

    $('<p>哈哈哈</p>')replaceAll('h2');

    解释:替换所有。将所有的h2标签替换成p标签。

    $('<br/><hr/><button>按钮</button>').replaceAll('h4')

    替换操作代码示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div class="box">
            <h2>alexsb</h2>
            <h2>alexsb</h2>
            <h3>wusirddb</h3>
        </div>
        <script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
            
            $(function(){
                // 页面中获取的DOM对象.replaceWith(替换的内容)
                $('h2').replaceWith('<span>圆圆</span>');
    
                // replaceAll()
                $('<p style = "color:red;">黑girl</p>').replaceAll('span');
    
            });
        </script>
        
    </body>
    </html>
    replaceWith replaceALL

     ㈢删除和清空操作

    ①remove()

    $(selector).remove(); 

    解释:删除节点后,事件也会删除(简言之,删除了整个标签)

    $('ul').remove();

    ②detach()

    $(selector).detach(); 

    解释:删除节点后,事件会保留

     var $btn = $('button').detach()
     //此时按钮能追加到ul中
     $('ul').append($btn)

    ③empty()

    $(selector).empty(); 

    解释:清空选中元素中的所有后代节点

    //清空掉ul中的子元素,保留ul
    $('ul').empty()

    ④代码示例:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    
    <body>
        <div class="box">
            <p style="font-size: 20px;font-weight: 600;">alex</p>
        </div>
        <button>删除</button>
        <script type="text/javascript" src="jquery-3.3.1.js"></script>
        <script type="text/javascript">
        $(function() {
    
            $('button').click(function() {
                  alert(1);
                // remove() 删除节点后 事件也会删除  删除了整个标签
                // console.log($(this).remove());
                // var jqBtn = $(this).remove();
                // $('.box').prepend(jqBtn);
    
    
                // detach() 删除节点后 事件会保留
                // var jqBtn = $(this).detach();
                // $('.box').prepend(jqBtn);
    
                //empty()
                $('.box').empty();
    
            })
        });
        </script>
    </body>
    
    </html>
    删除清空操作代码示例

    7,jQuery属性操作汇总

    1.样式属性操作 css('color') //获取值
    css('color','red') //设置单个值
    css({
    key1:value1,
    key2:value2
    });  //设置多个值
    key 既可以是驼峰  又可以是margin-left 要给margin-left 加引号
    
    2. 标签的属性操作
    attr(key) //获取属性值
    attr(key,value) //设置单个值
    attr({key1:value1,key2:value2});  //设置多个值
    
    3.DOM对象属性操作
    prop(property) //返回属性值
    prop(property,value) //设置属性和值
    prop(property:value,property:value,...) //设置多个属性和值
    
    4.类样式属性操作
    addClass("box")  //追加一个指定的类名,也可追加多个类名
    removeClass("box box2") //删除多个指定的类
    toggleClass("box") //如果存在就删除一个类,不存在就添加一个里类
    
    5.对值的操作
    $('#box').text(); //只获取匹配元素包含的内容,也可进行设置
    $('#box').html(); //获取标签和文本的内容
    $('input').val(); //用于表单控件中获取值
    
    innerText
    innerHTML
    value
    
    6.对DOM的操作 CRUD(增删改查)
    插入操作
        父子之间
            父元素.append(子元素); //追加某元素,在父元素中添加新的子元素。
                                    //子元素可以为:string,jsDOM对象,jquery对象
            子元素.appendTo(父元素); //追加到某元素。子元素添加到父元素
            父元素.prepend(子元素); //前置添加,子元素添加到父元素的第一个位置
            子元素.prependTo(父元素); //后置添加,第一个元素添加到父元素中
        兄弟之间
            兄弟元素.after(要插入的元素);
            要插入的兄弟元素.inserAfter(兄弟元素);
            兄弟元素.before(要插入的兄弟元素);
            要插入的兄弟元素.inserBefore(兄弟元素);
    替换操作
        //selector为页面中获取的DOM对象,content为要替换的内容
        $(selector).replaceWith(content); //将所有匹配的元素替换成指定的string,js对象,jquery对象
        $(content).replaceALL(selector);
    删除和清空操作
        $(selector).remove(); //删除节点后,事件也会删除(简言之,删除了整个标签)
        $(selector).detach(); //删除节点后,事件会保留
        $(selector).empty(); //清空选中元素中的所有后代节点

    6,jQuery的位置操作

  • 相关阅读:
    TOJ 5021: Exchange Puzzle
    Educational Codeforces Round 26
    2017 Multi-University Training Contest
    TOJ 5020: Palindromic Paths
    数论之 莫比乌斯函数
    TOJ 4475: The Coolest Sub-matrix
    Game on Tree
    python 线程
    python 管道、数据共享、进程池
    python 守护进程、同步锁、信号量、事件、进程通信Queue
  • 原文地址:https://www.cnblogs.com/wuqiuming/p/9897172.html
Copyright © 2011-2022 走看看