• day 50 jquary 终极版本


    jQuary

    一、jquary对象和dom对象

    1. jquary找到的标签对象成为-- jquary对象

    2. 原生js找到的标签对象成为 -- dom对象

      dom对象只能使用dom对象的方法,不能使用jquery对象的方法
      jquery对象也是,它不能使用dom对象的方法
      
      dom对象和jquery对象互相转换:
      	jquery对象转dom对象 -- jquery对象[0]  示例:$('#d1')[0]
      	dom对象转jquery对象 -- $(dom对象)
      

    二、jquary选择器

    1.基本选择器

    选择器是使用
    jQuery('#d1')  -- $('#d1')
    	#不管找什么标签,用什么选择器,都必须要写$(""),引号里面再写选择器,通过jQuery找到的标签对象就是一个jQuery对象,用原生JS找到的标签对象叫做DOM对象,看我们上面的jQuery对象部分的内容
    
    1. id选择器 -- $("#id")

    2. 标签选择器 -- $("tagName") --> $('div')

    3. class选择器 -- $(".className") -->$('.c1') //里面直接放类值

    4. 配合使用 -- $('div.c1') //找到c1 class类的div标签

    5. 组合选择器 -- $("#id, .className, tagName")

      总结:

      ​ 选择器可能找到的标签是多个,会放到数组里面,如果想到单独设置,用索引拿出来的是dom对象,通过 $(dom对象) 的方式转换成jquary对象。

    2.基本筛选器

    <ul>
        <li>蔡世楠</li>
        <li>尤利阳</li>
        <li id="l3">张雷</li>
        <li>申凯琦</li>
        <li id="l5">程德浩</li>
        <li>罗新宇</li>
        <li>曾凡星</li>
    </ul>
    
    :first  -- 示例:$('li:first')   # 第一个
    :last   // 最后一个
    :eq(index)  // 索引等于index的那个元素  	#index表示的是数字
    :even   // 匹配所有索引值为偶数的元素,从 0 开始计数
    :odd   // 匹配所有索引值为奇数的元素,从 0 开始计数
    :gt(index) // 匹配所有大于给定索引值的元素
    :lt(index) // 匹配所有小于给定索引值的元素
    :not(元素选择器)// 移除所有满足not条件的标签
    :has(元素选择器)// --$('li:has(.c1)')  找到后代中含有满足has里面选择器的那个标签
    :not(:has(.c1)) -- $('li:not(:has(.c1))') 排除后代中含有满足has里面选择器的那个标签
    
    总结:筛选器是对选择器选择多个标签进行筛选,拿到数组中符合筛选的结果
    

    3.属性选择器

    [attribute]
    [attribute=value]   // 属性等于
    [attribute!=value]  // 属性不等于
    
    // 示例,多用于input标签
    <input type="text">
    <input type="password">
    <input type="checkbox">
    $("input[type='checkbox']"); // 取到checkbox类型的input标签
    $("input[type!='text']");   // 取到类型不是text的input标签
    

    4.表单筛选器

    找到的是type属性为这个值的input标签中
    :text
    :password
    :file
    :radio
    :checkbox
    :submit
    :reset
    :button
    总结:
    	通过表单的这些属性可以找到属性所在的标签,
    弊端:
    	可能找到多个没用的标签,不能指定某个标签,建议使用 属性选择器
    

    5.表单对象属性筛选器

    :enabled   #可用的标签
    :disabled  #不可用的标签
    :checked   #选中的input标签
    :selected  #选中的option标签
    

    6.筛选器的方法

    下一个:
        $('#l3').next();  找到下一个兄弟标签
        $('#l3').nextAll(); 找到下面所有的兄弟标签
        $('#l3').nextUntil('#l5');#直到找到id为l5的标签就结束查找,不包含它
        
    上一个
    	$("#id").prev()
    	$("#id").prevAll()
    	$("#id").prevUntil("#i2")
    
    父亲元素
        $("#id").parent()
        $("#id").parents()  // 查找当前元素的所有的父辈元素(爷爷辈、祖先辈都找到)
        $("#id").parentsUntil('body') // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止,这里直到body标签,不包含body标签,基本选择器都可以放到这里面使用。
    
    儿子和兄弟元素
        $('ul').children(); 
        $('ul').children('#l3');  #找到符合后面这个选择器的儿子标签
    
        $('#l5').siblings();
        $('#l5').siblings('#l3'); #找到符合后面这个选择器的兄弟标签
    
    find
    	$('ul').find('#l3')  -- 类似于后代选择器  $('ul #l3')
    filter过滤
    	$('li').filter('#l3'); -- 过滤掉后代中不包含#l3的标签
    
    
    .first()  // 获取匹配的第一个元素
    .last()   // 获取匹配的最后一个元素
    .not()    // 从匹配元素的集合中删除与指定表达式匹配的元素  $('li').not('#l3');
    .has()    // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。
    .eq()     // 索引值等于指定值的元素
    

    三、标签操作

    样式操作

    1.样式类的操作

    • addClass();// 添加指定的CSS类名

    • removeClass();// 移除指定的CSS类名

    • hasClass();// 判断样式存不存在

    • toggleClass(); //切换CSS类名,如果有就移除,没有就添加

      2.css样式

    原生js
    	标签.style.color = 'red';
    jquery
    	$('.c1').css('background-color','red');  
    	同时设置多个css样式
    	$('.c1').css({'background-color':'yellow','width':'200px'})
    

    3.位置操作

    查看位置
    $('.c2').position();  //查看相对位置
    	{top: 20, left: 20}
    
    $('.c2').offset();    //查看距离窗口左上角的绝对位置
    	{top: 28, left: 28}
    
    设置位置
    $('.c2').offset({'top':'20','left':'40'});
    	//设置位置的时候不用添加px,
    

    4.jQuery绑定点击事件的写法

        原生js绑定点击事件
        // $('.c1')[0].onclick = function () {
        //     this.style.backgroundColor = 'green';
        // }
        
    jquery绑定点击事件
        $('.c1').click(function () {
            $(this).css('background-color','green');
        })
        //this是dom对象,需要转化为jquary
    

    点击事件和滚动事件的示例代码

    <script>
    	//点击事件来改变标签位置
        $('.change-postion').click(function () {
            $('.c1').offset({top:200,left:200});
        });
        
    	//滚动事件,监听滚动距离来显示或者隐藏标签
        $(window).scroll(function () {
            console.log($(window).scrollTop());
            if ($(window).scrollTop() >=200){
                $('.s1').removeClass('hide');
            }else {
                $('.s1').addClass('hide');
            }
        });
        
    	// 回到顶部,scrollTop设置值
        $('.s1').click(function () {
            $(window).scrollTop(0);
        })
    </script>
    
    

    5.尺寸

    $('.c1').height();  //content 高度
    $('.c1').width();   //content 宽度
    $('.c1').innerHeight();//content高度+padding高度
    $('.c1').innerWidth(); //content宽度+padding宽度
    $('.c1').outerHeight();//content高度+padding高度 + border高度
    $('.c1').outerWidth();//content宽度+padding宽度+ border宽度
    

    文本操作

    html()    //取得第一个匹配元素的html内容,包含标签内容
    html(val) //设置所有匹配元素的html内容,识别标签,能够表现出标签的效果
    
    text()	  // 取得所有匹配元素的内容,只有文本内容,没有标签
    text(val) //设置所有匹配元素的内容,不识别标签,将标签作为文本插入进去
    示例:
    $('.c1').text('<h3>你好,太白</h3>');
    $('.c1').html('<h3>你好,太白</h3>');
    

    值操作

    获取值
    	input type='text'的标签--		$('#username').val();
    	input type='radio'标签获取被选中的标签的值 --- 	$(':radio:checked').val();
    	input type='checkbox'标签获取被选中的标签的值 --- 	直接$(':checkbox:checked').val();//是不行的,这样选取多个的时候只能取到第一个,需要循环取值才可以拿到  
    		var d = $(':checkbox:checked');
    		for (var i=0;i<d.length;i++){
    			console.log(d.eq(i).val());
    		}
    		
    	单选select --- $('#city').val();
    	多选select --- $('#author').val(); // ["2", "3"]	
    
    设置值
    	input type='text'的标签 --- $('#username').val('李杰');
    	input type='radio'标签 ---  $('[name="sex"]').val(['3']);
    			如果 $('[name="sex"]').val('3'),所有标签的值都变成了'3';
    
    	input type='checkbox'设置值 --- $('[name="hobby"]').val(['2','3'])
    	单选select --- $('#city').val('1');  option value='1'
    	多选select --- $('#author').val(['2','3'])
    	
    

    属性操作

    attr(attrName)// 返回第一个匹配元素的属性值
    attr(attrName, attrValue)// 为所有匹配元素设置一个属性值
    attr({k1: v1, k2:v2})// 为所有匹配元素设置多个属性值
    removeAttr(attrName)// 从每一个匹配的元素中删除一个属性
    
    示例:
    	设置单个属性
    		$('.c1').attr('xx','oo');
    	设置多个属性
    		$('.c1').attr({'age':'18','sex':'alex'});
    	查看属性
    		$('.c1').attr('属性名');
        	$('.c1').attr('xx');
        删除属性
        	$('.c1').removeAttr('xx');
    
    prop -- 针对的是checkedselecteddisabled..
    
    查看标签是否有checked属性,也就是是否被选中
    	    attr $(':checked').attr('checked'); //结果有checked --没有 undefined
    	    prop $(':checked').prop('checked'); //结果有true  --没有 false
    		
    		通过设置属性的方式来设置是否选中:
    			$(':radio').eq(2).prop('checked',true);  true和false不能加引号
    			$(':radio').eq(2).prop('checked',false);
    
    简单总结:
    	1.对于标签上有的能看到的属性和自定义属性都用attr
    	2.对于返回布尔值的比如checkbox、radio和option的是否被选中或者设置其被选中与取消选中都用prop。
    	具有 true 和 false 两个属性的属性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr()
    

    文档处理

    添加到指定元素内部的后面
    	$(A).append(B)// 把B追加到A
    	$(A).appendTo(B)// 把A追加到B	
    	#添加字符串照样能识别标签  *****
    	$('#d1').append('<a href="http://www.jd.com">京东</a>');
    添加到指定元素内部的前面
    	$(A).prepend(B)// 把B前置到A
    	$(A).prependTo(B)// 把A前置到B
    	示例
    		$('a').prependTo($('div'));
    
    添加到指定元素外部的后面
    	$(A).after(B)// 把B放到A的后面
    	$(A).insertAfter(B)// 把A放到B的后面
    
    添加到指定元素外部的前面
    	$(A).before(B)// 把B放到A的前面
    	$(A).insertBefore(B)// 把A放到B的前面
    	
    移除和清空元素
    	remove()// 从DOM中删除所有匹配的元素。
    	empty()// 删除匹配的元素集合中所有的子节点,包括文本被全部删除,但是匹配的元素还
    	$('div').remove();    //包括自己
    	$('div').empty();	  //清空不包括自己
    
    替换
    	replaceWith()     
    	rep	laceAll()	  //用前面的内容替换 括号中的内容
    	示例:
    		var a = document.createElement('a')
    		a.href = 'http://www.baidu.com';
    		a.innerText = 'xxx';
    		
    		$('span').replaceWith(a);  //用 a标签 替换 span
    		$(a).replaceAll('span');   //用 span 替换 a标签
    		
    clone()克隆
    	<button class="btn">屠龙宝刀,点击就送!</button>	
    
        $('.btn').click(function () {
            // var a = $(this).clone(); //克隆标签
            var a = $(this).clone(true);  //连带事件一起克隆
            $(this).after(a);
    
        })
    

    四、事件

    1.事件的绑定方式

    • 方式一: $('#d1').click(function () {})
    • 方式二: $('#d1').on('click',function () {})
    <script src="jquery.js"></script>
    <script>
        //方式1
        // $('#d1').click(function () {
        //     $(this).css({'background-color':'green'});
        // });
        //方式2
        $('#d1').on('click',function () {
            $(this).css({'background-color':'green'});
        })
    </script>
    

    2.常用事件

    • .click() 左键单击事件
    • .dblclick() 双击
    • .focus(function(){}) -->获取光标触发的事件
    • .blur(function(){}) -->获取光标触发的事件
    • $('select').change(function () {}) -->域内容发生改变时触发的事件
    • .mouseenter()/leave() -->只穿过父级元素 可以用hover合并enter和leave
        //获取光标触发的事件
        $('[type="text"]').focus(function () {
            $('.c1').css({'background-color':'black'});
        });
        //失去光标(焦点)触发的事件
        $('[type="text"]').blur(function () {
            $('.c1').css({'background-color':'purple'});
        });
    
        //域内容发生改变时触发的事件
        $('select').change(function () {
            $('.c1').toggleClass('cc');
        });
    
        //鼠标悬浮触发的事件
        // $('.c1').hover(
        //     //第一步:鼠标放上去
        //     function () {
        //         $(this).css({'background-color':'blue'});
        //     },
        //     //第二步,鼠标移走
        //     function () {
        //         $(this).css({'background-color':'yellow'});
        //     }
        // )
    
        // 鼠标悬浮  等同于hover事件
        // 鼠标进入
        // $('.c1').mouseenter(function () {
        //     $(this).css({'background-color':'blue'});
        // });
        // 鼠标移出
        //  $('.c1').mouseout(function () {
        //     $(this).css({'background-color':'yellow'});
        // });
    	
        // $('.c2').mouseenter(function () {
        //     console.log('得港绿了');
        // });
        // 鼠标悬浮事件
        // $('.c2').mouseover(function () {
        //     console.log('得港绿了');
        // });
        // mouseover 和 mouseenter的区别是:mouseover事件是如果该标签有子标签,那么移动到该标签或者移动到子标签时会连续触发,mmouseenter事件不管有没有子标签都只触发一次,表示鼠标进入这个对象
    
    
    //键盘按下触发的事件  eevent事件对象
        $(window).keydown(function (e) {
            // console.log(e.keyCode); //每个键都有一个keyCode值,通过不同的值来触发不同的事件
            if (e.keyCode === 37){
                $('.c1').css({'background-color':'red'});
            }else if(e.keyCode === 39){
                $('.c1').css({'background-color':'green'});
            }
            else {
                $('.c1').css({'background-color':'black'});
            }
        })
        // 键盘抬起触发的事件
        $(window).keyup(function (e) {
            console.log(e.keyCode);
        })
    

    input事件:

    input事件:
        22期百度:<input type="text" id="search">
    
        <script>
        $('#search').on('input',function () {
        console.log($(this).val());
        })
        </script>
    ### input事件 只能用on 来做点击事件
    

    3.事件冒泡

    <script src="jquery.js"></script>
    <script>
        $('#d1').click(function () {
            alert('父级标签');
        });
        $('#d2').click(function () {
            alert('子级标签');
        });
    </script>
    ## 点击子级标签,父级标签会重新执行下自己的方法
    解决方法:
    	在子级标签后面添加
    		return false
    或者	   e.stopPropagation()
    

    4.事件委托

    ​ 事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件,将未来添加进来的某些子标签自动绑定上事件。

    格式:上层标签对象.on('click','委托人选择器',function(){});
    
    <div id="d1">
        <button class="c1">爱的魔力转圈圈</button>
    </div>
    <script>
    #将'button' 选择器选中的标签的点击事件委托给了$('#d1');
        $('#d1').on('click','button',function () {
            alert('得港被雪飞调教了,大壮很难受!');
            var btn = document.createElement('button');
            $(btn).text('爱的魔力转圈圈');
            $(btn).addClass('c1');
            //添加到div标签里面的后面
            $('#d1').append(btn);
        });
    </script>
    

    5.页面载入和window.onload

    
    window.onload = function () {
         $('.c1').click(function () {
              $(this).css({'background-color':'green'});
         })
    // 等待整个页面中的内容全部加载完成之后,触发window.onload对应的函数里面的内容
            // window.onload 有覆盖现象,会被后面的window.onload给重新赋值
    
    页面载入,$(function (){alert('xx');}) -- $(document).ready(function(){});
    $(function () {
        $('.c1').click(function () {
             $(this).css({'background-color':'green'});
        })
    });
    //等待所有的文档标签加载完之后才会执行
    
    区别:
      1.window.onload()函数有覆盖现象,必须等待着图片资源加载完成之后才能调用
      2.jQuery的这个入口函数没有函数覆盖现象,文档加载完成之后就可以调用(建议使用此函数)
    

    五、高级操作

    动画效果

    each循环

    循环标签对象数组
    $('li').each(function(k,v){
    	console.log(k,v);
    });
    
    循环普通数组
    var d1 = ['aa','bb','cc'];
    $.each(d1,function(k,v){
    	console.log(k,v);
    })
    
    跳出循环  return false; 类似于break
    $('li').each(function(k,v){
    	console.log(k,v.innerText);
    	if (k === 1){
    		return false;
    	}
    
    });
    
    跳出本次循环  return; 类似于continue
    $('li').each(function(k,v){
    	
    	if (k === 1){
    		return;
    	}
    	console.log(k,v.innerText);
    });
    
    

    data

    给标签对象添加数据,类似于添加了全局变量
    	.data(key, value): 设置值
    	.data(key)   取值
    	.removeData(key) 删除值
    

    插件(了解)

    <script>
    jQuery.extend({ //$.extend({})
      min:function(a, b){return a < b ? a : b;}, //自定义了一个min和max方法,min和max作为键,值是一个function
      max:function(a, b){return a > b ? a : b;}
    });
    jQuery.min(2,3);// => 2
    jQuery.max(4,5);// => 5
    $('div').min(1,2);不能通过标签对象来调用
    </script>
    
    <script>
      jQuery.fn.extend({  //给任意的jQuery标签对象添加一个方法
        check:function(){
          return this.each(function(){this.checked =true;});
        },
        uncheck:function(){
          return this.each(function(){this.checked =false;});
        }
      });
    // jQuery对象可以使用新添加的check()方法了。
    $("input[type='checkbox']").check();
    </script>
    
    
  • 相关阅读:
    Linq系列:基础与本质(Part III)
    CLR系列:浅析委托
    8万亿 全球第二还是最二?
    CLR系列:窥视HashTable
    c#3.0系列:Anonymous Type In CLR(3.5)
    VC6 编译选项问题
    C++资源库不完全版本
    如何用C实现C++的特性
    几种用于WSN的仿真工具
    嵌入式编程的好资源
  • 原文地址:https://www.cnblogs.com/xiaobai686/p/11968416.html
Copyright © 2020-2023  润新知