jQuery事件
- 原生Javascript事件
- jQuery
原生JS事件绑定
直接写几个案例
开关灯示例
<head>
	<style>
        .c1{
            width: 200px;
            height: 200px;
        }
        .bg_green {
            background-color: green;
        }
        .bg_red {
            background-color: red;
        }
    </style>
</head>
<body><div id="d1" class="c1 bg_red bg_green"></div>
<button id="d2">变色</button>
<script>
    let btnEle = document.getElementById('d2')
    let divEle = document.getElementById('d1')
    btnEle.onclick = function () {  // 绑定点击事件
        divEle.classList.toggle('bg_red')
        //有这个class,就删除,显示绿色,没有就添加,显示红色
    }
</script>
</body>
焦点框案例
搜索框,自带文字,得到焦点之后文字消失
<!--onfocus事件,改变input标签的value为空-->
<!--onblur失去焦点事件,将input的value改回原样-->
<body>
<input type="text" value="没有焦点" id="d1">
<script>
    let iptEle = document.querySelector('#d1');
    iptEle.onfocus = function () {
        iptEle.value = '';
    }
    iptEle.onblur = function () {
        iptEle.value = '失去焦点';
    }
</script>
</body>
实时显示时间
//访问页面之后,将访问的时间展示到input框中
//动态展示当前时间,设置一个循环计时器,循环改变时间
//问题:按多次开始按钮,会开启多个定时器,按结束,只能结束一个定时器
//解决:设置一个变量,有值的时候不开启计时器,没有值的时候才能开启。在清除计时器的时候重置计时器为null
<body>
<div id="d1">Time</div>
<div>
    <button id="st">Start</button>
    <button id="ed">Stop</button>
</div>
<script>
    let t = null
    let divEle = document.querySelector('#d1');
    let stEle = document.querySelector('#st');
    let edEle = document.querySelector('#ed');
    //展示时间函数。获得一个时间对象,改变div中的字
    function showTime() {
        let currentTime = new Date();
        divEle.innerText = currentTime.toLocaleString()
    }
    //start按钮的点击事件,检查是否已经有计时器,如果没有,开启一个计时器,每一秒调用一次展示时间
    stEle.onclick = function () {
        if(!t){
            t = setInterval(showTime,1000)
        }
    }
    //停止显示按钮,清除计时器
    edEle.onclick = function () {
        clearInterval(t)
        t = null
    }
</script>
</body>
省市联动
两个select框,选择了省,在第二个select框显示对应的市:仅模拟
<body>
<select name="" id="d1">
    <option value="" selected disabled>--请选择--</option>
</select>
<select name="" id="d2"></select>
<script>
    let proEle = document.getElementById('d1')
    let cityEle = document.getElementById('d2')
    // 先模拟省市数据
    data = {
        "河北": ["廊坊", "邯郸", '唐山'],
        "北京": ["朝阳区", "海淀区", '昌平区'],
        "山东": ["威海市", "烟台市", '临沂市'],
        '上海': ['浦东新区', '静安区', '黄浦区'],
        '深圳': ['南山区', '宝安区', '福田区']
    };
    // 选for循环获取省
    for (let key in data) {
        // 将省信息做成一个个option标签 添加到第一个select框中
        // 1 创建option标签
        let opEle = document.createElement('option')
        // 2 设置文本
        opEle.innerText = key
        // 3 设置value
        opEle.value = key  // <option value="省">省</option>
        // 4 将创建好的option标签添加到第一个select中
        proEle.appendChild(opEle)
    }
    // 文本域变化事件  change事件
    proEle.onchange = function () {
        // 先获取到用户选择的省
        let currentPro = proEle.value
        // 获取对应的市信息
        let currentCityList = data[currentPro]
        // 清空市select中所有的option
        cityEle.innerHTML = ''
        // 自己加一个请选择
        let ss = "<option disabled selected>请选择</option>"
        // let oppEle = document.createElement('option')
        // oppEle.innerText = '请选择'
        // oppEle.setAttribute('selected','selected')
        cityEle.innerHTML = ss
        // for循环所有的市 渲染到第二个select中
        for (let i = 0; i < currentCityList.length; i++) {
            let currentCity = currentCityList[i]
            // 1 创建option标签
            let opEle = document.createElement('option')
            // 2 设置文本
            opEle.innerText = currentCity
            // 3 设置value
            opEle.value = currentCity  // <option value="省">省</option>
            // 4 将创建好的option标签添加到第一个select中
            cityEle.appendChild(opEle)
        }
    }
</script>
</body>
jQuery
内部封装了原生的js代码,能够书写更少的代码完成js操作,还添加了一些功能
前端,模块不叫模块,叫类库
jQuery使用的时候也需要导入,但是文件非常小,基本不影响网络速度
jQuery版本:使用3版本
下载:用第一个,压缩之后的,内容更小
新建一个js文件
导入jQuery
<script src="jQuery-3.4.1"></script>
为了不让多个html都手动输入引入jQuery的语句代码,可以借助webstorm代码初始化功能,自动添加
也可以直接引入jQuery提供的cdn服务,基于网络直接请求加载
cdn:内容分发网络,用于加速访问。有收费也有免费:bootcdn,复制对应的script标签就行
jQuery基本语法
jQuery(选择器).action,也可以简写成 $(选择器).action
jQuery与原生代码对比
例,将p标签内部颜色改为红色
<p id='d1'>ppp</p>
<script>
	//原生
	let pEle = getElementById('d1');
	pEle.style.color = 'red';
	//jQuery
	$('p').css('color','blue')
</script>
jQuery查找标签
- 
基本选择器 $('#d1') //id选择器 $('#c1') //class选择器 $('div') //标签选择器 //得到的都是jQuery对象,通过取索引才能得到标签对象,jQuery对象只能使用jQuery方法,标签对象只能使用标签的方法 $('div')[0] //标签对象转jQuery对象:$括起来 $(document.getElementById('d1'))
- 
组合选择器 $('div.c1') //找类是c1的div标签 $('div#d1') //找id的d1的div标签
- 
混合使用 $('.c1,.c2') //c1类和c2类 $('div span') //div的所有后代span $('div>span') //div的儿子span
基本筛选器
$('ul li:fist') //ul标签下的第一个li标签
$('ul li:last') //ul标签下的最后一个li标签
$('ul li:eq(2)') //eq对应索引,拿到li表中索引是2的li
$('ul li:even') //拿到偶数位的li,odd:奇数位的
$('ul li:gt(2)') //拿到索引大于2的所有元素
$('ul li:lt(2)') //拿到索引小于2的所有元素
//同html的特殊符号,大于小于
其他:has,not
$('ul li:not("#d1")') //移除满足条件的标签,不要id为d1的
$('div:has("p")') //内部含有p标签的div,选出包含一个或多个标签在内的标签
属性查找器
$('[username]') //查找所有包含username属性的标签
$('[type='text']') //拿到type类型为text的所有标签
$('input[type='text']') //所有type为text的input框
表单筛选器
只用于表单里
$(':text') //只适用于form表单里的标签,等价于上面第二个 $('input[type='text']')
/*一类的方法包括
:text
:password
:file
:checked等等*/
//checked会将checked和selected都拿到,而selected不会,所以在用checked的时候,自己加一个限制条件:input:checked
筛选器方法
next,nextAll,nextUntil,prev,prevAll,prevUntil,parent,
$('#d1').next() //jQuery对象的方法,拿到d1标签的下一个标签
$('#d1').nextAll() //拿到同级别下面所有的标签
$('#d1').nextUntil('.c1') //拿d1下面的标签,直到类为c1的标签
$('.c1').prev() //拿到c1类的上一个标签
//同样有All,Until
$('#d1').parents() //一层层拿,得到一个数组,一直拿到html
$('#d1').parentsUntil('body')
$('#d2').children() //拿到所有的子标签
$('#d1').siblings() //同级别上下所有
//找div下的p标签
$('div p')
//也可以
$('div').find('p')
//拿第一个标签,处理用冒号:first,也可以用.first()
$('div').find('p').first() //拿到div下的第一个p标签

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号