• java学习day28-jQuery(常用)


    jQuery

    jQuery简介

    什么是jQuery(了解)

    jQuery: JavaScript Query JS查询

    jQuery是一门轻量的、免费开源的JS函数库(就是JS的简单框架)

    jQuery可以极大的简化JS代码

    jQuery的核心思想:“写的更少,但做的更多”


    轻量的:是指一个技术或框架对代码或程序的侵入程度是比较低的。

    或者说代码对该技术依赖程度越低,这个技术越轻。对该技术的依赖程度越高,这个技术越重。

    jQuery本质就是一个包含了很多函数的JS文件,如果要在某一个HTML中使用这个JS文件中的函数,就必须得将JS文件引入到HTML中(想使用jQuery,就得引入jQuery的函数库文件,就是一个JS文件)


    jQuery的优势(了解)

    (1) 可以极大的简化JS代码

    (2) 可以像CSS选择器一样获取html元素

    css中获取所有的div,给div添加样式:

    div{ css属性... }
    

    jQuery中获取所有div,给div添加边框样式:

    $("div").css("border", "2px solid red");
    
    JS获取id为div1的元素: document.getElementById("div1")
    jQuery获取id为div1的元素: $("#div1")
    

    (3) 可以通过修改css属性控制页面的效果

    (4) 可以兼容常用的浏览器

    比如: JS中的innerText属性、removeNode()函数、replaceNode( )函数 这些函数在某些浏览器中是无法使用的。

    jQuery中提供了相应的函数( text函数、remove函数、replaceWith函数 )

    常用浏览器:谷歌浏览器、火狐浏览器、苹果浏览器、欧朋浏览器等

    jQuery引入

    jQuery的函数库文件就是一个普通的JS文件,引入jQuery和引入JS文件的方式一样。

    <!-- 在使用jQuery之前,必须先引入jQuery的函数库文件 -->
    <script src="js/jquery-1.8.3.js"></script>
    

    在引入jQuery函数库文件时,如果文件引入路径错误,则会导致文件引入失败,如下:

    Uncaught ReferenceError: $ is not defined
    或者
    Failed to load resource: net: :ERR_ FILE_ NOT FOUND
    

    文档就绪事件函数

    <head>
    <meta charset="UTF-8">
    <!-- 在使用jQuery之前,必须先引入jQuery的函数库文件 -->
    <script src="js/jquery-1.8.3.js"></script>
    <script>
    	//1.获取id为demo的h1元素
    	var h1 = document.getElementById( "demo" );
    	//2.获取h1元素中的内容( innerHTML )
    	alert( h1.innerHTML );
    </script>
    </head>
    <body>
    	<h1 id="demo">jQuery的引入示例...</h1>
    </body>
    

    问题描述:上面的代码在执行时,会报一个错误:

    Uncaught TypeError:Cannot read property innerHTML of null at.....
    

    原因描述:在执行获取id为demo的元素时, h1元素还没有被浏览器加载到,所以获取不到h1元素。

    解决方式一:

    将script标签移到body内部,也就是h1元素的后面

    这样浏览器在加载时,会先加载h1元素,再执行获取h1元素的代码,由于在获取h1元素之前,h1元素已经被浏览器加载过了,所以后面再获取就能够获取到!

    代码示例:

    <body>
    	<h1 id="demo">jQuery的引入示例...</h1>
    	<script>
    		//1.获取id为demo的h1元素
    		var h1 = document.getElementById( "demo" );
    		//2.获取h1元素中的内容( innerHTML )
    		alert( h1.innerHTML );
    	</script>
    </body>
    

    解决方式二:

    将获取元素的代码放在文档就绪事件函数中,文档就绪事件函数会在浏览器加载完所有的html元素后(也就是加载完最后一个html元素时)立即执行。

    由于当前网页中的所有元素都被加载了,h1元素肯定也被加载了,此时再获取h1元素就一定能获取到。

    <head>
    <meta charset="UTF-8">
    <!-- 在使用jQuery之前,必须先引入jQuery的函数库文件 -->
    <script src="js/jquery-1.8.3.js"></script>
    <script>
    	$(function(){
    		//1.获取id为demo的h1元素
    		var h1 = document.getElementById( "demo" );
    		//2.获取h1元素中的内容( innerHTML )
    		alert( h1.innerHTML );
    	});
    </script>
    </head>
    <body>
    	<h1 id="demo">jQuery的引入示例...</h1>
    </body>
    

    解决方式三:

    将获取元素的代码放在一个自定义的函数中,并将该函数绑定在h1元素的点击事件上,当我们点击h1元素时会执行自定义的函数,函数执行时才获取h1元素,此时就能够获取到h1元素。

    <head>
    <meta charset="UTF-8">
    <!-- 在使用jQuery之前,必须先引入jQuery的函数库文件 -->
    <script src="js/jquery-1.8.3.js"></script>
    <script>
    	function fn1(){
    		//1.获取id为demo的h1元素
    		var h1 = document.getElementById( "demo" );
    		//2.获取h1元素中的内容( innerHTML )
    		alert( h1.innerHTML );
    	}
    </script>
    </head>
    <body>
    	<h1 id="demo" onclick="fn1()">jQuery的引入示例...</h1>
    </body>
    

    总结:什么时候该使用文档就绪事件函数?

    如果在获取元素时,获取元素的代码执行的时机,比元素本身加载的时间还要早,如果元素还没有加载就获取,必然是获取不到的。

    可以将获取元素的代码放在文档就绪事件函数中,等浏览器加载完整个网页后,文档就绪事件函数才会执行,此时所有的元素都被加载了,再获取任何元素都能获取到!

    jQuery提供的文档就绪事件函数(简写形式):

    <script>
    	$(function(){
    		//在浏览器加载完整个html网页后立即执行
    	});
    </script>
    

    其完整写法为:

    <script>
    	$(document).ready(function(){
    		//在浏览器加载完整个html网页后立即执行
    	});
    </script>
    

    JS也为我们提供了文档就绪事件函数,其写法为:

    <script>
    	window.onload = function(){
    		//在浏览器加载完整个html网页后立即执行
    	}
    </script>
    

    jQuery选择器(重点)

    基本选择器

    (1)元素名选择器
    $("div") -- 选中所有的div元素
    $("span") -- 选中所有的span元素
    
    (2)class/类选择器
    $(".s1") -- 选中所有class值为s1的元素(class值为s1的元素可能是任何元素)
    $("span.s1") -- 选中所有class值为s1的span元素
    
    (3)id选择器
    $("#one") -- 选中id为one的元素
    
    (4)多元素选择器
    $("div,span,.s1,#one") -- 选中所有的div元素,以及所有的span元素,以及所有class值为s1的元素,以及id为one的元素
    

    层级选择器

    $("div span") -- 选中所有div内部的所有span元素
    $("#one span") -- 选中id为one的元素内部的所有span元素
    
    $("#two+span") -- 选中id为two的元素后面紧邻的span兄弟元素
    $("#two").next("span") -- 选中id为two的元素后面紧邻的span兄弟元素
    $("#two").prev("span") -- 选中id为two的元素前面紧邻的span兄弟元素
    
    $("#two~span") -- 选中id为two的元素后面所有的span兄弟元素
    $("#two").nextAll("span") -- 选中id为two的元素后面所有的span兄弟元素
    $("#two").prevAll("span") -- 选中id为two的元素前面所有的span兄弟元素
    
    $("#two").siblings("span") -- 选中id为two的元素前、后所有的span兄弟元素
    

    基本过滤选择器

    (1) 选中第一个div元素
    $("div:first")
    $("div:eq(0)")
    $("div").eq(0)
    
    (2) 选中最后一个div元素
    $("div:last")
    $("div:eq(-1)")
    $("div").eq(-1)
    
    (3) 选中第n+1个div元素(n从零开始)
    $("div:eq(n)")
    $("div").eq(n)
    

    综合案例

    创建表格元素

    练习1:创建单行单列的表格

    function createTable1(){
    	//1.创建一个table元素
    	var $tab = $("<table></table>");
    	//2.创建一个tr元素
    	var $tr = $("<tr></tr>");
    	//3.创建一个td元素, 并为td添加内容
    	var $td = $("<td></td>");
    	$td.html("Hello TD~~");
    	//4.将td添加到tr元素内部
    	$tr.append( $td );
    	//5.将tr添加到table元素内部
    	$tab.append( $tr );
    	//6.将table添加到body元素内部
    	$("body").append( $tab ); 
    	
    	//$("body").append( "<table><tr><td>Hello~~TD...</td></tr></table>" );
    }
    

    练习2.1:创建单行6列的表格

    function createTable2(){
    	//1.创建一个table元素
    	var $tab = $("<table></table>");
    	//2.创建一个tr元素
    	var $tr = $("<tr></tr>");
    	for(var i=0;i<6;i++){ 
    		//3.创建一个td元素, 并为td添加内容
    		var $td = $("<td></td>");
    		$td.html("Hello TD~~");
    		//4.将td添加到tr元素内部
    		$tr.append( $td );
    	}
    	//5.将tr添加到table元素内部
    	$tab.append( $tr );
    	//6.将table添加到body元素内部
    	$("body").append( $tab ); 
    }
    

    练习2.2:创建5行6列的表格

    function createTable2(){
    	//1.创建一个table元素
    	var $tab = $("<table></table>");
    	for(var j=0;j<5;j++){ //外层循环:控制行数
    		//2.创建一个tr元素
    		var $tr = $("<tr></tr>");
    		for(var i=0;i<6;i++){ //内层循环:控制列数
    			//3.创建一个td元素, 并为td添加内容
    			var $td = $("<td></td>");
    			$td.html("Hello TD~~");
    			//4.将td添加到tr元素内部
    			$tr.append( $td );
    		}
    		//5.将tr添加到table元素内部
    		$tab.append( $tr );
    	}
    	//6.将table添加到body元素内部
    	$("body").append( $tab ); 
    }
    

    练习3:创建指定行和列的表格

    function createTable3(){
    	//获取用户输入的行数和列数(js方式)
    	//var rows = document.getElementById("rows").value;
    	//var cols = document.getElementById("cols").value;
    	var rows = $("#rows").val();
    	var cols = $("#cols").val();
    	console.log(rows+" : "+cols);
    	//1.创建一个table元素
    	var $tab = $("<table></table>");
    	for(var j=0;j<rows;j++){ //外层循环:控制行数
    		//2.创建一个tr元素
    		var $tr = $("<tr></tr>");
    		for(var i=0;i<cols;i++){ //内层循环:控制列数
    			//3.创建一个td元素, 并为td添加内容
    			var $td = $("<td></td>");
    			$td.html("Hello TD~~");
    			//4.将td添加到tr元素内部
    			$tr.append( $td );
    		}
    		//5.将tr添加到table元素内部
    		$tab.append( $tr );
    	}
    	//6.将table添加到body元素内部
    	$("body").append( $tab ); 
    }
    

    仿QQ好友列表

    /** 通过jQuery实现仿QQ列表好友列表 */
    function openDiv(thisobj){ //thisobj是一个js对象 --转成--> jQuery对象
    	//先将其他三个分组关闭( 将其他三个分组内的div设置为隐藏 )
       	// $(thisobj).parents("tr").siblings().find("div").css("display","none");
    	$("table span").not(thisobj).next("div").hide(); //css("display", "none")
    	//根据被点击的分组找到分组内的好友列表, 切换好友列表的展示状态
    	$(thisobj).next("div").toggle(); //如果元素显示则切换为隐藏, 如果隐藏则切换为显示
    }
    

    模拟员工信息管理系统

    练习1:添加员工信息

    function addEmp(){
    	//1.获取要添加的员工信息(id, name, email, salary)
    	var id = $("#box1 input[name='id']").val().trim();
    	var name = $("#box1 input[name='name']").val().trim();
    	var email = $("#box1 input[name='email']").val().trim();
    	var salary = $("#box1 input[name='salary']").val().trim();
    	console.log(id+" : "+name+" : "+email+" : "+salary);
    	
    	//2.校验员工信息
    	//2.1.添加的员工信息不能为空!
    	if( id == "" || name == "" || email == "" || salary == "" ){
    		alert( "添加的员工信息不能为空!" );
    		return;
    	}
    	
    	//2.2.添加的员工id不能重复! (id=3)
    	//获取所有的tr元素, 并遍历所有的tr元素
    	var flag = false; //false表示id是不存在的!!!
    	$("table tr").each(function(){ //this(JS对象)表示当前被遍历的元素 
    		// this --转换为jQuery对象--> $( this ) 
    		var _id = $(this).find("td:eq(1)").text();
    		//拿着用户输入的id和当前员工的id进行比较
    		if( id == _id ){ //只要有一个相等,就说明id已存在,则停止添加
    			alert("您输入的员工ID已存在, 请重新添加!");
    			flag = true; //true表示id已存在!!
    			//return; 放在这里的return不能终止程序的执行
    		}
    	});
    	if( flag ){ //true表示id已存在!!
    		return;
    	}
    	//3.将员工信息添加到页面上(添加到table中)
    	//>>创建一个tr元素
    	var $tr = $("<tr></tr>");
    	//>>创建5个td元素,并将员工信息添加到td中
    	var $td1 = $("<td><input type='checkbox'/></td>"); //复选框
    	var $td2 = $("<td>"+id+"</td>"); //ID
    	var $td3 = $("<td>"+name+"</td>"); //name
    	var $td4 = $("<td>"+email+"</td>"); //email
    	var $td5 = $("<td>"+salary+"</td>"); //email
    	//>>将td元素添加到tr中
    	$tr.append( $td1 ).append( $td2 ).append( $td3 ).append( $td4 ).append( $td5 );
    			
    	//>>将tr元素添加到table中
    	$("table").append( $tr );
    }
    

    练习2:删除员工信息

    function delEmp(){
    	//1.获取所选中员工所在的tr行 (获取所有被选中的复选框)
    	//$("input:checked").parents("tr").remove(); //会连接表头一起删除
    	$("input:checked").parent("td").parent("tr").remove();
    }
    

    练习3:修改员工信息()

    function updEmp(){
        var id = $("#box2 input[name='id']").val().trim();
        var name = $("#box2 input[name='name']").val().trim();
        var email = $("#box2 input[name='email']").val().trim();
        var salary = $("#box2 input[name='salary']").val().trim();
    
        //判断修改的内容是不是为空
        if(id==""||name==""||email==""||salary==""){
            alert("修改后的信息不能为空");
            return;//结束程序,提前让函数结束
        }
        //判断修改的id是否存在,存在才可以修改
        var flag =false;//假设id不存在
        $("table tr").each(function(){
            //获取每一行的id的值
            var tempId = $(this).find("td").eq(1).html();
            if(id == tempId){//如果有id存在,才可以修改
                $(this).find("td").eq(1).html(id);
                $(this).find("td").eq(2).html(name);
                $(this).find("td").eq(3).html(email);
                $(this).find("td").eq(4).html(salary);
                flag =true;
            }
        });
        if(!flag){
            alert("id不存在");
        }
    }
    

    练习4:实现全选或全不选

    function checkAll(){
    	//1.获取全选复选框的选中状态( 选中(true)?  没选中(false)? )
    	var isCheck = $("#all").prop("checked"); //true|false
    	//2.获取所有普通复选框, 将全选框的选中状态设置给所有普通复选框
    	$("input[type='checkbox'][id!='all']").prop("checked",isCheck);
    }
    

    jQuery总结

    html元素操作

    1、创建元素

    $("<div></div>") -- 创建一个div元素,返回的是一个jQuery对象,表示创建的div元素
    $("<div>xxxx</div>") -- 创建一个包含内容的div元素,返回的是一个jQuery对象,表示创建的div元素
    

    2、添加子元素

    $parent.append( $child ) -- 父元素调用方法添加子元素
    $("body").append( "<div>我是新来的...</div>" ); -- 往body元素内部追加一个div子元素
    

    3、删除元素

    $("div").remove() -- 删除所有的div元素
    
    JS删除所有div元素:
    //获取所有的div元素(返回的是所有div组成的数组)
    var divArr = document.getElementsByTagName("div"); //div数组
    //遍历div数组,依次删除每一个div元素
    var len = divArr.length;
    for(var i=0;i<len;i++){
        //通过当前元素的父元素删除当前元素(始终删除第一个)
        divArr[0].parentNode.removeChild( divArr[0] );
    }
    

    4、替换元素

    $("div").replaceWith("<p>我是来替换的…</p>")
    

    html元素内容和值的操作

    <div>
      	这是一个div11元素
        <span>这是一个span元素</span>
        这是一个div1111元素
    </div>
    

    1、html()函数 (类似于js中的innerHTML属性)

    -- 用于获取或设置元素的内容,比如为div、span、p、h1~h6、table、tr、td、form等元素设置内容

    $("div").html() -- 获取所有div中的第一个div的内容
    $("div").html("xxxx") -- 为所有div设置内容
    

    2、text()函数 (类似于js中的innerText属性,innerText在部分浏览器中不兼容)

    -- 用于获取或设置元素的文本内容

    $("div").text() -- 获取所有div中的所有文本内容
    $("div").text("xxxx") -- 为所有div设置文本内容
    

    3、val()函数 (类似于js中的value属性)

    -- 获取或设置表单项元素的value值(input/select/option/textarea)

    $("input").val() -- 获取所有input元素中的第一个input元素的value值
    $("input").val(值) -- 为所有的input元素设置value值
    

    元素属性和css属性操作

    <input type="text" name="username" id="inp"/>
    

    1、prop()函数 -- 用于获取或设置元素的属性值

    在jQuery1.6版本之后才有这个函数,1.6之前版本的jQuery可以使用attr()函数

    $("input[type='checkbox']").prop("checked")
    // 获取input复选框的选中状态, 返回true表示复选框为选中状态,返回false表示复选框为取消选中状态
    $("input[type='checkbox']").prop("checked", true)
    // 设置所匹配的复选框元素为选中状态
    
    $("#inp").prop("name"); //获取id为inp元素的name属性值, 返回useranme
    $("#inp").prop("name","user"); //为id为inp的元素设置name属性值, name属性值就会变成user
    

    2、css()函数 -- 用于获取或设置元素的css属性值

    $("#div1").css("width") -- 获取id为div1元素的宽度
    $("#div1").css("width","200px") -- 设置id为div1元素的宽度为200px
    $("#div1").css({
    	"width" : "200px",
    	"height" : "150px",
    	"border" : "5px solid red",
    	"background" : "pink"
    }); // 为id为div1的元素设置宽度为200px、高度为150px、边框以及背景颜色等样式
    

    其他函数

    1、each() 函数

    $(selector).each(function( index,element ){})
    // each()函数可以遍历$(selector)选择器选中的所有元素(即每次都选择器选中的元素中获取一个元素,并执行function 函数)
    // function中的index -- 表示遍历的元素的下标
    // function中的element -- 表示当前正在遍历的元素(也可以通过this获取)
    

    示例:

    $("table tr").each(function(){
    	//从当前行中获取第二个单元格的内容(当前行的id值)
    	var tempId = $(this).find("td").eq(1).html();
    	//拿着用户输入的id 和 每一行中的id值进行比较
    	if( id == tempId ){
    		alert("添加失败,id已存在!");
    		flag = true; //id存在,更新flag的值,true表示已存在!
    	}
    });
    

    2、show()/hide() 函数

    show() -- 设置元素由隐藏变为显示

    $("div").show() -- 设置所有的div元素为显示
    

    等价于:

    $("div").css("display", "block");
    

    hide() -- 设置元素由显示变为隐藏

    $("div").hide() -- 设置所有的div元素为隐藏
    

    等价于:

    $("div").css("display", "none")
    

    2、toggle()/slideToggle()

    toggle() -- 切换元素的显示状态, 如果元素是显示的, 则切换为隐藏, 否则切换为显示

    slidToggle() --切换元素的显示状态, 如果元素是显示的, 则切换为隐藏,否则切换为显示,切换为显示为下拉状态,隐藏为收缩状态。

    扩展内容

    为元素绑定点击事件

    以点击事件为例,为元素绑定点击事件的方式为:

    方式1(js版):

    <script>
      function fn(){
        alert("input按钮被点击了...");
      }
    </script>
    <body>
    	<input onclick="fn()" type="button" value="点我~!" />
    </body>
    

    方式2(js版):

    <script>
    	window.onload = function(){
    		//获取id为btn的元素
    		var btn = document.getElementById("btn");
    		btn.onclick = function(){
    			alert("input按钮被点击了...");
    		}
    	}
    </script>
    <body>
    	<input id="btn" type="button" value="点我~!" />
    </body>
    

    方式3(jQuery版):

    <script>
    $(function(){
        //当点击btn按钮时,触发点击事件执行其中的函数
        $("#btn").click( function(){
            alert("input按钮被点击了...");
        });
    });
    </script>
    <body>
    	<input id="btn" type="button" value="点我~!" />
    </body>
    

    js对象和jQuery对象的互相转换

    通过JS的方式获取元素,返回的是JS对象,JS对象只能调用JS的属性或函数

    通过jQuery选择器获取元素,返回的是jQuery对象(结构像一个集合),jQuery对象只能调用jQuery的属性或函数。

    如果现有JS对象,但我们需要调用jQuery的属性或函数,可以将JS对象转成jQuery对象;

    如果现有jQuery对象,但我们需要调用JS的属性或函数,可以将jQuery对象转成JS对象;

    image-20200512153617181

  • 相关阅读:
    Atitit 趋势管理之道 attilax著
    Atitit 循环处理的新特性 for...else...
    Atitit 2017年的技术趋势与未来的大技术趋势
    atitit 用什么样的维度看问题.docx 如何了解 看待xxx
    atitit prj mnrs 项目中的几种经理角色.docx
    Atitit IT办公场所以及度假村以及网点以及租房点建设之道 attilax总结
    Atitit 工具选型的因素与方法 attilax总结
    Atitit.团队文化建设影响组织的的一些原理 法则 定理 效应 p826.v4
    Atiitt 管理方面的误区总结 attilax总结
    Atitit 未来趋势把控的书籍 attilax总结 v3
  • 原文地址:https://www.cnblogs.com/liqbk/p/13080531.html
Copyright © 2020-2023  润新知