浅谈jQuery 选择器和dom操作


Posted in Javascript onJune 07, 2016

浅谈jQuery 选择器和dom操作

JQuery选择器

1.基本选择器

基本选择器是JQuery中最常用的选择器,也是最简单的选择器,它通过元素id、class 和标签名来查找DOM元素。这个非常重要,下面的内容都是以此为基础,逐级提高的。

1).“$(“#id”)”,获取id指定的元素,id是全局唯一的,所以它只有一个成员。

2).“$(“.class”)”,获取class指定的元素,不同的元素可以具有相同的class属性,所以它可能具有多个成员。

3).“$(“element”)”,获取element(元素名,比如div、table等)指定的元素,它可能具有多个成员。

4).“$(“*”)”,获取所有元素,相当于document。

5).“$(“selector1,selector2,…,selectorN”)”,将每个选择器匹配到的元素合并后一起返回。返回selector1匹配的集合+selector2匹配的集合+…+selectorN匹配的集合。

2.层次选择器

什么是层次?层次就是父子关系、兄弟关系的节点。所以,层次选择器就是用来获取指定元素的父子节点、兄弟节点。

1).“$(“ancestor descendant”)”,获取ancestor元素下边的所有元素。

2).“$(“parent > child”)”,获取parent元素下边的所有子元素(只包含第一层子元素)。

3).“$(“pre + next”)”,获取紧随pre元素的后一个兄弟元素。

4).“$(“pre ~ siblings”)”,获取pre元素后边的所有兄弟元素。

3.过滤选择器

过滤?肯定是要添加过滤条件的。通过“:”添加过滤条件,比如“$(“div:first”)”返回div元素集合的第一个div元素,first是过滤条件。

按照不同的过滤规则,过滤选择器可以分为基本过滤,内容过滤,可见性过滤,属性过滤,子元素过滤和表单对象属性过滤选择器。

1). 基本过滤选择器

a) “:first”,选取第一个元素,别忘记它也是被放在一个集合里哦!因为JQuery它是DOM对象的一个集合。如,“$("tr:first")”返回所有tr元素的第一个tr元素,它仍然被保存在集合中。

b)“:last”,选取最后一个元素。如,“$("tr:last")”返回所有tr元素的最后一个tr元素,它仍然被保存在集合中。

c) “:not(selector)”,去除所有与给定选择器匹配的元素。如,“$("input:not(:checked)")”返回所有input元素,但去除被选中的元素(单选框、多选框)。

d)“:even”,选取所有元素中偶数的元素。因为JQuery对象是一个集合,这里的偶数指的就是集合的索引,索引从0开始。

e) “:odd”,选取所有元素中奇数的元素,索引从0开始。

f) “:eq(index)”,选取指定索引的元素,索引从0开始。

g)“:gt(index)”,选取索引大于指定index的元素,索引从0开始。

h)“:lt(index)”,选取索引小于指定index的元素,索引从0开始。

i)  “:header”,选取所有的标题元素,如hq、h2等。

j)  “:animated”,选取当前正在执行的所有动画元素。

2). 内容过滤选择器

它是对元素和文本内容的操作。

a) “:contains(text)”,选取包含text文本内容的元素。

b)“:empty”,选取不包含子元素或者文本节点的空元素。

c) “:has(selector)”,选取含有选择器所匹配的元素的元素。

d)“:parent”,选取含有子元素或文本节点的元素。(它是一个父节点)

3). 可见性过滤选择器

根据元素的可见与不可见状态来选取元素。

“:hidden”,选取所有不可见元素。

“:visible”,选择所有可见元素。

可见选择器:hidden 不仅包含样式属性 display 为 none 的元素,也包含文本隐藏域 (<input type=“hidden”>)和 visible:hidden 之类的元素。

4).属性过滤选择器

通过元素的属性来选取相应的元素。

a) “[attribute]”,选取拥有此属性的元素。

b)“[attribute=value]”,选取指定属性值为value的所有元素。

c) “[attribute !=value]”,选取属性值不为value的所有元素。

d)“[attribute ^= value]”,选取属性值以value开始的所有元素。

e) “[attribute $= value]”,选取属性值以value结束的所有元素。

f) “[attribute *= value]”,选取属性值包含value的所有元素。

g)“[selector1] [selector2]…[selectorN]”,复合性选择器,首先经[selector1]选择返回集合A,集合A再经过[selector2]选择返回集合B,集合B再经过[selectorN]选择返回结果集合。

5). 子元素过滤选择器

一看名字便是,它是对某一元素的子元素进行选取的。

a) “:nth-child(index/even/odd)”,选取索引为index的元素、索引为偶数的元素、索引为奇数的元素。

l nth-child(even/odd):能选取每个父元素下的索引值为偶(奇)数的元素。

l nth-child(2):能选取每个父元素下的索引值为 2 的元素。

l nth-child(3n):能选取每个父元素下的索引值是 3 的倍数的元素。

l nth-child(3n + 1):能选取每个父元素下的索引值是 3n + 1的元素。

b)“:first-child”,选取第一个子元素。

c) “:last-child”,选取最后一个子元素。

d)“:only-child”,选取唯一子元素,它的父元素只有它这一个子元素。

6). 表单过滤选择器

选取表单元素的过滤选择器。

a) “:input”,选取所有<input>、<textarea>、<select >和<button>元素。

b)“:text”,选取所有的文本框元素。

c) “:password”,选取所有的密码框元素。

d)“:radio”,选取所有的单选框元素。

e) “:checkbox”,选取所有的多选框元素。

f) “:submit”,选取所有的提交按钮元素。

g)“:image”,选取所有的图像按钮元素。

h)“:reset”,选取所有重置按钮元素。

i)  “:button”,选取所有按钮元素。

j)  “:file”,选取所有文件上传域元素。

k)“:hidden”,选取所有不可见元素。

7).表单对象属性过滤选择器

选取表单元素属性的过滤选择器。

“:enabled”,选取所有可用元素。

“:disabled”,选取所有不可用元素。

“:checked”,选取所有被选中的元素,如单选框、复选框。

“:selected”,选取所有被选中项元素,如下拉列表框、列表框。

四、JQuery中的DOM操作

一种与浏览器,平台,语言无关的接口。使用该接口可以轻松地访问页面中所有的标准组件。

DOM Core:DOM Core 并不专属于 JavaScript,任何一种支持 DOM 的程序设计语言都可以使用它。它的用途并非仅限于处理网页,也可以用来处理任何一种是用标记语言编写出来的文档,例如:XML。

HTML DOM:使用 JavaScript 和 DOM 为 HTML 文件编写脚本时,有许多专属于HTML-DOM的属性。

CSS-DOM:针对于CSS操作,在JavaScript中,CSS-DOM 主要用于获取和设置 style 对象的各种属性。

1.查找节点

请见上面的“基本选择器”。

2.创建节点

使用JQuery的工厂函数,创建一个新节点:var $newNode = $(“<p>你好</p>”);,然后将新节点插入到指定元素节点处。

3.插入节点

将新创建的节点,或获取的节点插入指定的位置。

“$node.append($newNode)”,向每个匹配的元素内部的结尾处追加结尾处。如,“$("p").append("<b>Hello</b>");”将"<b>Hello</b>"添加到"p"内部的结尾处。

“$newNode.appendTo($node)”,将新元素追加到每个匹配元素内部的结尾处。

“$node.prepend($newNode)”,向每个匹配的元素内部的结尾处追加开始处。如,“$("p").prepend("<b>Hello</b>");”将"<b>Hello</b>"添加到"p"内部的起始处。

“$newNode.prependTo($node)”, 将新元素追加到每个匹配元素内部的开始处。

“$node.after($newNode)”,向每个匹配的元素的之后插入内容,是并列兄弟。如,“$("p").after("<b>Hello</b>");”将"<b>Hello</b>"插入到"p"的后边。它们是兄弟关系。

“$newNode.insertAfter($node)”,将新元素插入到每个匹配元素之后。

“$newNode.before($node)”,向每个匹配的元素的之前插入内容。如,“$("p").before("<b>Hello</b>");”将"<b>Hello</b>"插入到"p"的前面,它们是兄弟关系。

“$node.insertBefore($newNode)”,将新元素插入到每个匹配元素之前。

注意:如果插入的节点是不是新创建的,插入将变成移动操作。所以,在插入这样的节点之前应该使用clone的节点。

4.删除节点

从DOM中删除所有匹配的元素。如,“$("p").remove(".hello");”删除所为class属性值为hello的p元素,还有它下面的所有元素。

从DOM中清除所有匹配的元素。如,“$("p").empty();”清除所有p元素,还有它下面的所有元素。

5.复制节点

克隆匹配的DOM元素。如,“$("p").clone();”返回克隆后的副本,但不具有任何行为。如果要将DOM的事件一起克隆,应该使用“$("p").clone(true);”。

6.替换节点

将所有匹配的元素都替换为指定的 HTML 或 DOM 元素。如,$("p").replaceWith("<b>Paragraph. </b>");,将所有p元素,替换为"<b>Paragraph. </b>"。

与replaceWith相返:$("<b>Paragraph. </b>").replaceAll("p");。

7.包裹节点

wrap():将指定节点用其他标记包裹起来。该方法对于需要在文档中插入额外的结构化标记非常有用, 而且不会破坏原始文档的语义。如,“$("p").wrap("<div class='wrap'></div>");”。每个p元素被包裹到<div>中。

wrapAll():将所有匹配的元素用一个元素来包裹。而wrap()方法是将所有的元素进行单独包裹。如,“$("p").wrapAll("<div></div>");”,将所有p元素包裹到<div>中。

wrapInner():将每一个匹配的元素的子内容(包括文本节点)用其他结构化标记包裹起来。如,“$("p").wrapInner("<b></b>");”, <b>被每一个p元素包裹。

8.属性设置

attr():获取属性和设置属性。

当为该方法传递一个参数时,即为某元素的获取指定属性。如,“$("img").attr("src");”,获取img元素的src属性值。

当为该方法传递两个参数时,即为某元素设置指定属性的值。如,“$("img").attr("src","test.jpg");”,设置img元素的src属性值为test.jsp。

jQuery 中有很多方法都是一个函数实现获取和设置。如:attr(),html(),text(),val(),height(),width(),css()等。

removeAttr():删除指定元素的指定属性。

9.样式操作

可以通过“attr()”设置或获取css样式。

追加样式:addClass() 。如,“$("p").addClass("selected");”,向所有P元素中追加“selected”样式。

移除样式:removeClass() --- 从匹配的元素中删除全部或指定的class。如,“$("p").removeClass("selected");”,删除所有P元素中的“selected”。

切换样式:toggleClass() --- 控制样式上的重复切换。如果类名存在则删除它,如果类名不存在则添加它。如,“$("p").toggleClass("selected");”,所有的P元素中,如果存在“selected”样式就删除“selected”样式,否则就添加“selected”样式。

判断是否含有某个样式:hasClass() --- 判断元素中是否含有某个 class,有返回 true; 否则返回 false。如,“$(this).hasClass("protected")”,判断当前节点是否有“protected”样式。

10.设置或获取HTML、文本和值

读取和设置某个元素中的 HTML 内容: html(),该方法可以用于 XHTML,但不能用于 XML 文档。

读取和设置某个元素中的文本内容:text(),该方法既可以用于 XHTML 也可以用于 XML 文档。

读取和设置某个元素中的值:val(),该方法类似 JavaScript 中的 value 属性。对于文本框,下拉列表框,单选框该方法可返回元素的值(多选框只能返回第一个值)。如果为多选下拉列表框,则返回一个包含所有选择值的数组。

11.常用遍历节点的方法

取得匹配元素的所有子元素组成的集合:children()。该方法只考虑第一层子元素而不考虑任何后代元素。

取得匹配元素后面紧邻的兄弟元素的集合(但集合中只有一个元素):next()。

取得匹配元素前面紧邻的兄弟元素的集合(但集合中只有一个元素):prev()。

取得匹配元素前后所有的兄弟元素: siblings()。

12.CSS-DOM操作

获取和设置元素的样式属性:css()。

获取和设置元素透明度:opacity()属性。

获取和设置元素高度,宽度:height(),width()。在设置值时,若只传递数字,则默认单位是px。如需要使用其他单位则需传递一个字符串,例如 “$(“p:first”).height(“2em”)”;

获取元素在当前视窗中的相对位移:offset()。它返回的对象包含了两个属性:top,left。该方法只对可见元素有效。

五、JQuery中的事件

1.加载DOM

在页面加载完毕后,浏览器会通过 JavaScript 为 DOM 元素添加事件。在常规的 JavaScript 代码中,通常使用 window.onload 方法,在JQuery 中使用$(document).ready() 方法。JQuery中的简化写法“$()”。在window.onload中注册事件时,只能在一个window.onload体中注册。但使用JQuery,可以在多个$(document).ready()或$()中注册。

2.事件绑定

对匹配的元素对指定的事件绑定。
如,昨天我们在window.onload中绑定事件的方法:

“$("p").onclick(function(){
alert( $(this).text() );

});”    

在JQuery的$(document).ready()
中可以这样绑定:
“$("p").click(function(){ alert( $(this).text() );
});”

使用bind(),可以这样绑定:

$("p").bind("click", function(){
alert( $(this).text() );

});
 

3.合成事件

hover():模拟光标悬停时间。当光标移动到元素上时,会触发指定的第一个函数,当光标移出这个元素时,会触发指定的第二个函数。

如,悬停效果:
$("td").hover( function ()
{$(this).addClass("hover");},
function ()
{$(this).removeClass("hover");});

toggle():
用于模拟鼠标连续单击事件。第一次单击元素,触发指定的第一个函数,当再一次单击同一个元素时,则触发指定的第二个函数,如果有更多个函数,则依次触发,直到最后一个。如,设置元素的选择与非选中效果:

$("td").toggle( function ()
{$(this).addClass("selected");},
function ()
{$(this).removeClass("selected");});

使用toggle()而不传递参数,效果为切换元素的可见状态。

4.事件的冒泡

事件会按照 DOM 层次结构像水泡一样不断向上只止顶端。

解决:在事件处理函数中返回 false,会对事件停止冒泡。还可以停止元素的默认行为。

目前的所有UI交互或其事件,都支持这个特性。在自己的事件处理函数返回false将中止事件的继续向下传递。返回true事件继续向下传递。

5.事件对象的属性

事件对象:当触发事件时,事件对象就被创建了。在程序中使用事件只需要为处理函数添加一个参数。在事件处理函数中使用些参数。

如,获取事件发生时,相对于页面的位置:event.pageX, event.pageY,event是事件处理函数的参数。

6.移除事件

移除某按钮上的所有click 事件:$(“btn”).unbind(“click”)

移除某按钮上的所有事件:$(“btn”).unbind();

one():该方法可以为元素绑定处理函数。当处理函数触发一次后,事件立即被删除。即在每个对象上,事件处理函数只会被执行一次。

六、JQuery中的DOM动画

通过设置DOM对象的显示与隐藏方式,可以产生动画效果。

1.无动画效果的隐藏与显示

hide():在HTML文档中,为一个元素调用hide()方法会将该元素的display样式改为none。代码功能同css(“display”, “none”);相同。

show():将元素的display样式改为先前的显示状态。

toggle():切换元素的可见状态:如果元素时可见的,则切换为隐藏;如果元素时隐藏的,则切换为可见的。

2.通过设置透明度效果的隐藏与显示,达到淡入淡出的动画效果

fadeIn(),fadeOut():只改变元素的透明度。fadeOut() 会在指定的一段时间内降低元素的不透明度,直到元素完全消失。fadeIn() 则相反。如,用600毫秒缓慢的将段落淡入:$("p").fadeIn("slow");。

fadeTo():把不透明度以渐近的方式调整到指定的值(0 ? 1 之间)。并在动画完成后可选地触发一个回调函数。如,用200毫秒快速将段落的透明度调整到0.25,动画结束后,显示一个“Animation Done”信息框:“$("p").fadeTo("fast", 0.25, function(){ alert("Animation Done."); });”。

3.通过设置高度效果的隐藏与显示,达到滑下与收起的动画效果

slideDown(),slideUp():只会改变元素的高度。如果一个元素的display属性为none,当调用slideDown() 方法时,这个元素将由上至下延伸显示。slideUp() 方法正好相反,元素由下至上缩短隐藏。如,用600毫秒缓慢的将段落滑下:$("p").slideDown("slow");。

slideToggle():通过高度变化来切换匹配元素的可见性。
如,200毫秒快速将段落滑上或滑下,动画结束后,会显示一个“Animation Done”信息框:
“$("p").slideToggle("fast",function(){
alert("Animation Done.");
});”。

使用JavaScript、JQuery可以处理当前页面的动态更新,再结合CSS样式可以做出十分漂亮的UI,甚至比桌面软件UI漂亮的多。JavaScript的编写与调试非常麻烦,所以也有一些公司出品了专门针对JavaScript应用的简化开发,比如Google出品的GWT,可以像使用Java编写swing那样编写JavaScript。它为用户提供像swing那样的UI接口与事件等操作并且支持JAVA的核心库。使用GWT自己的编译器,可以将JAVA代码编译为JavaScript代码、CSS样式文件和HTML。

以上这篇浅谈jQuery 选择器和dom操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js实现图片在未加载完成前显示加载中字样
Sep 03 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
Apr 16 Javascript
JS实现选择TextArea内文本的方法
Aug 03 Javascript
用headjs来管理和加载js 提高网站加载速度
Nov 29 Javascript
Bootstrap select实现下拉框多选效果
Dec 23 Javascript
bootstrap table 数据表格行内修改的实现代码
Feb 13 Javascript
weebox弹出窗口不居中显示的解决方法
Nov 27 Javascript
动态加载JavaScript文件的3种方式
May 05 Javascript
基于webpack4搭建的react项目框架的方法
Jun 30 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
Aug 27 Javascript
解决jQuery使用append添加的元素事件无效的问题
Aug 30 jQuery
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
Jun 07 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
Jun 07 #Javascript
DOM操作和jQuery实现选项移动操作的简单实例
Jun 07 #Javascript
Knockoutjs 学习系列(二)花式捆绑
Jun 07 #Javascript
Knockoutjs 学习系列(一)ko初体验
Jun 07 #Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
Jun 07 #Javascript
Javascript之Number对象介绍
Jun 07 #Javascript
Javascript之Math对象详解
Jun 07 #Javascript
You might like
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
jquery 学习之一 对象访问
2010/11/23 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
vue使用原生swiper代码实例
2020/02/05 Javascript
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
简单说明Python中的装饰器的用法
2015/04/24 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
Python内置函数delattr的具体用法
2017/11/23 Python
python生成密码字典的方法
2018/07/06 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
歌唱比赛获奖感言
2014/01/21 职场文书
王兆力在市委党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
医生个人年终总结
2015/02/28 职场文书
2015年高中语文教学总结
2015/08/18 职场文书
房屋买卖定金协议书
2016/03/21 职场文书
MySQL 分页查询的优化技巧
2021/05/12 MySQL
详解Vue3使用axios的配置教程
2022/04/29 Vue.js