jQuery回顾(二)

作者 Zhendong Ho 日期 2018-11-18
jQuery回顾(二)

jQuery包装集

判断元素是否存在于页面

Js实现

判断getElementById返回的是否等于null或undefined

window.onload = function () {
//getElementById返回单独一个Dom对象,如果id为btn1的元素不存在,则点击按钮报错
document.getElementById('btn1').onclick = function () {
alert('hello');
};
};

jQuery实现

判断选择器选择到的元素集合的length

$(function () {
alert($('#btn1').length);//0
//即便选择器没有选择到任何元素,那么返回的也不是null或者是undefined,而是一个长度为0的集合对象,因此不会报错
$('#btn1').click(function () {
alert('hello');
});

if($('#btn1').length > 0) {
alert('页面上存在该元素!');
} else {
alert('页面上不存在该元素!');
}
});

jQuery对象是一个包装集

本身jQuery对象就是一个dom对象的集合,所以可以直接通过索引访问其中的任何一个对象,并且返回的就是dom对象。

$('#btn')[0];//访问第0个dom对象
$('#btn').get(1);//如果jQuery对象选择了多个dom,如p标签,则可以通过索引访问第n个dom对象

通过jQuery操作类样式

增加一个样式

$('body').addClass('night');//追加应用一个新的样式,不会覆盖之前的样式

移除一个样式

$('body').removeClass('night');//移除样式

判断元素是否应用样式

//判断一个元素是否应用了某个样式
if ($('body').hasClass('night')) {
//移除样式
$('body').removeClass('night');
} else {
//增加样式
$('body').addClass('night');
}

切换类样式的应用与移除

$('body').toggleClass('night');//等价于上述元素是否应用样式的代码

基本过滤选择器

以冒号开头

$('#btn').click(function () {
$('p:first').css('backgroundColor', 'red');//设置第一个p元素的背景色为红色

$('p:last').css('backgroundColor', 'red');//设置最后一个p元素的背景色为红色

$('p:eq(1)').css('backgroundColor', 'red');//设置第二个p元素的背景色为红色,eq表示索引,下标从0开始

$('p:even').css('backgroundColor', 'blue');//设置索引为偶数的p元素,背景颜色为蓝色

$('p:odd').css('backgroundColor', 'yellow');//设置索引为奇数的p元素,背景色为黄色

$('p:gt(2)').css('backgroundColor', 'green');//索引大于2的p元素,设置背景色为绿色

$('p:lt(3)').css('backgroundColor', 'blue');//索引小于3的p元素,设置背景色为蓝色

$('p:not(.cls)').css('backgroundColor', 'pink');//选取页面上的p元素,除了应用了cls类的,设置背景色为粉色

$(':header').css('backgroundColor', 'red');//设置所有标题都变成红色
});

总结

过滤器 解释 栗子
:first 选取第一个元素 $('p:first')
:last 选取最后一个元素 $('p:last')
:eq(索引序号) 选取索引等于索引序号的元素,eq即equal $('p:eq(1)')
:gt(索引序号) 选取索引大于索引序号的元素,gt即greater than $('p:gt(2)')
:lt(索引序号) 选取索引小于索引序号的元素,lt即less than $('p:lt(3)')
:even 选取索引是偶数的元素 $('p:even')
:odd 选取索引是奇数的元素 $('p:odd')
:not(选择器) 选取不满足“选择器”条件的元素 $('p:not(.cls)')
:header 选取所有的h1到h6的标题元素 $(':header')

$(selector, context)用法

表示在context的范围内,搜索selector

$('#t1 tr').click(function () {
$('td:even', this).css('backgroundColor', 'blue');//当前对象中,索引序号为偶数的td
$('td:odd', this).css('backgroundColor', 'red');
});

属性过滤选择器

//1.选取所有input元素中具有name属性的,并且name属性的值等于txt1
$('input[name=txt1]');

//2.选取所有input元素,具有name属性(无论name属性值为什么)
$('input[name]');

//3.选取所有body下面具有name属性的元素
$('body *[name]');
$('body [name]');

//4.选取页面上具有name属性,同时name属性的值为以a开头的
$('body *[name^=a]');
//选取name为""的元素
$('body *[name=]');

//5.选取以a结尾的
$('body *[name$=a]');

//6.name属性中包含a的
$('body *[name*=a]');

//7.name属性不等于abc的
$('body *[name!=abc]');

//8.同时具有多个属性的
$('body *[name][id][value]');

表单对象属性选择器

//选取页面上所有被禁用的元素
$(':disabled');
//选取页面上所有没有被禁用的元素
$(':enabled');

//选取form1下的所有被禁用的元素
$('#form1 :disabled');
//选取form1下的所有没有被禁用的元素
$('#form1 :enabled');

//选取页面上所有的input元素,同时必须是被禁用的元素
$('input:disabled');
//选取页面上所有的input元素,同时必须是没有被禁用的元素
$('input:enabled');

//获取所有被选中的Checkbox和radio(只有Checkbox和radio有checked属性)
$(':checked');
//所有没有被选中的元素
$('div :not(:checked)');

checkbox练习

$(function () {
//为每个checkbox注册单击事件
$('input[type=checkbox]').click(function () {
//1.获取当前所有被选中的checkbox
var chks = $('input[type=checkbox]:checked');

//2.获取个数
var n = chks.length;

//3.获取每个checkbox的value(只能手动遍历)
//遍历把每一个checkbox的value放到一个数组中
var names = [];
$.each(chks, function (k, chkObj) {
names[names.length] = $(chkObj).val();
});

//4.把个数和值显示到p中
$('#pmsg').text('共选中了' + n + '项,分别是' + names.toString());
});
});

简化类型写法

代替了$('input[type=xxx]')的写法。

//选取页面上所有的checkbox
$('input[type=checkbox]');//属性过滤选择器
$(':checkbox');//简写,选取页面上所有的checkbox

//选取页面上所有的radio
$(':radio');
//选取页面上所有的单行文本框
$(':text');
//选取页面上所有密码框
$(':password');
//选取页面上所有的hidden
$(':hidden');
//选取页面上选中的复选框
$(':checkbox:checked');

注意

$('input');//表示所有<input>、<textarea>、<select>和<button>元素
$(':input')//只获得<input>

动态创建DOM节点

动态创建超链接

方法一

append:在被选元素的结尾(被选元素里面)插入指定内容。

prepend:在被选元素的开头插入内容。

after:在被选元素后(被选元素的兄弟节点)插入指定的内容

before:在被选元素前插入内容。

//1.动态创建一个超链接
var aLinkObj = $('<a href="http://www.baidu.com">百度</a>');
//2.div把将超链接添加到div后面
$('#dv1').append(aLinkObj);
//$('#dv1').prepend(aLinkObj);//div添加超链接到div前面

方法二

appendTo:在被选元素的结尾插入 HTML 元素。

prependTo:在被选元素的开头插入 HTML 元素。

insertAfter:在被选元素后插入 HTML 元素。

insertBefore:在被选元素前插入 HTML 元素。

//超链接追加到div后面
$('<a href="http://www.baidu.com">百度</a>').appendTo('#dv1');
//$('<a href="http://www.baidu.com">百度</a>').prrpendTo('#dv1');//主动追加到div前面

动态创建表格

var websites = {
'百度': 'http://www.baidu.com',
'新浪': 'http://www.sina.com.cn',
'搜狐': 'http://www.sohu.com',
'网易': 'http://www.163.com'
};

$(function () {
//点击按钮,动态创建表格
$('#btn').click(function () {
//动态创建表格
var tblObj = $('<table border="1"></table>').appendTo('body');
//动态创建表格的行
for (var key in websites) {
$('<tr><td>' + key + '</td><td><a href="' + websites[key] + '">' + key + '</a></td></tr>').appendTo(tblObj);
}
});
});

删除节点

清空元素

empty

清空某元素下的所有子节点。

//清空元素
$('#btnEmpty').click(function () {
var dvObj = $('#dv1');
dvObj.empty();//删除div内部的所有内容
});

删除元素

remove(selector)

删除当前元素,返回值为被删除的元素。

//删除元素
$('#btnRemove').click(function () {
$('#dv1').remove();//直接把元素删除
});

练习

五秒钟协议按钮

var sec = 4;
$(function () {
var intervalId = setInterval(function () {
if (sec > 0) {
$('#btn').val('请仔细阅读协议(' + sec + ')');
sec--;
} else {
$('#btn').val('同意').prop('disabled', false);
//停止计时器
clearInterval(intervalId);
}
}, 1000);
});

替换和包裹

替换节点

replaceWith

$(function () {
$('#btn').click(function () {
//先使用选择器选到对应的元素,然后使用指定的元素对象来替换选择到的元素
$('hr').replaceWith('<a href="#">百度</a>');//把水平线替换成超链接
});
});

replaceAll

$(function () {
$('#btn').click(function () {
//首先动态创建一个元素,用该元素替换所有指定的选择器选择到的元素
$('<font color="red">==========</font>').replaceAll('hr');//动态创建一个font元素,替换所有的水平线
});
});

包裹节点

wrap

//包裹到元素外部
$('p').wrap('<font color="blue"></font>');//在p元素外部用font标签包裹

wrapInner

//包裹到元素内部
$('p').wrapInner('<font color="red"></font>');//在p元素内部包裹font标签

wrapAll

//包裹所有的
$('p').wrapAll('<font color="red"></font>');//所有的p标签使用一个标签来包裹