通过标准的JavaScript操作DOM与jQuyer操作DOM的对比,我们不难发现: 1.通过jQuery方法包装后的对象,是一个类数组对象。它与DOM对象完全不同,唯一相似的是它们都能操作DOM。 2.通过jQuery处理DOM的操作,可以让开发者更专注业务逻辑的开发,而不需要我们具体知道哪个DOM节点有那些方法,也不需要关心不同浏览器的兼容性问题,我们通过jQuery提供的API进行开发,代码也会更加精短。
基本筛选器的描述:
内容过滤器描述如下表:
:hidden选择器,不仅仅包含样式是display=”none”的元素,还包括隐藏表单、visibility等等 我们有几种方式可以隐藏一个元素: 1.CSS display的值是none。 2.type=”hidden”的表单元素。 3.宽度和高度都显式设置为0。 4.一个祖先元素是隐藏的,该元素是不会在页面上显示 5.CSS visibility的值是hidden 6.CSS opacity的指是0 如果元素中占据文档中一定的空间,元素被认为是可见的。 可见元素的宽度或高度,是大于零。 元素的visibility: hidden 或 opacity: 0被认为是可见的,因为他们仍然占用空间布局。
属性筛选选择器
子元素筛选选择器
表单元素选择器
JavaScript创建流程比较简单,大体如下: 创建节点(常见的:元素、属性和文本) 添加节点的一些属性 加入到文档中 流程中涉及的一点方法: 创建元素:document.createElement 设置属性:setAttribute 添加文本:innerHTML 加入文档:appendChild
创建元素节点: 可以有几种方式,后面会慢慢接触。常见的就是直接把这个节点的结构给通过HTML标记字符串描述出来,通过 ()函数处理, (“html结构”) 一条一句就搞定了,跟写HTML结构方式是一样的 $(“< div class=’right’>< div class=’aaron’>动态创建DIV元素节点< /div>< /div>”)
.append()和.appendTo()两种方法功能相同,主要的不同是语法——内容和目标的位置不同 append()前面是被插入的对象,后面是要在对象内插入的元素内容 appendTo()前面是要插入的元素内容,而后面是被插入的对象
before与after都是用来对相对选中元素外部增加相邻的兄弟节点 2个方法都是都可以接收HTML字符串,DOM 元素,元素数组,或者jQuery对象,用来插入到集合中每个匹配元素的前面或者后面 2个方法都支持多个参数传递after(div1,div2,….) 注意点: after向元素的后边添加html代码,如果元素后面有元素了,那将后面的元素后移,然后将html代码插入 before向元素的前边添加html代码,如果元素前面有元素了,那将前面的元素前移,然后将html代码插
append()向每个匹配的元素内部追加内容 prepend()向每个匹配的元素内部前置内容 appendTo()把所有匹配的元素追加到另一个指定元素的集合中 prependTo()把所有匹配的元素前置到另一个指定的元素集合中
before()和.insertBefore()实现同样的功能。主要的区别是语法——内容和目标的位置。 对于before()选择表达式在函数前面,内容作为参数,而.insertBefore()刚好相反,内容在方法前面,它将被放在参数里元素的前面 .after()和.insertAfter() 实现同样的功能。主要的不同是语法——特别是(插入)内容和目标的位置。 对于after()选择表达式在函数的前面,参数是将要插入的内容。对于 .insertAfter(), 刚好相反,内容在方法前面,它将被放在参数里元素的后面 before、after与insertBefore。insertAfter的除了目标与位置的不同外,后面的不支持多参数处理 注意事项: insertAfter将JQuery封装好的元素插入到指定元素的后面,如果元素后面有元素了,那将后面的元素后移,然后将JQuery对象插入; insertBefore将JQuery封装好的元素插入到指定元素的前面,如果元素前面有元素了,那将前面的元素前移,然后将JQuery对象插入;
empty 顾名思义,清空方法,但是与删除又有点不一样,因为它只移除了 指定元素中的所有子节点。
remove与empty一样,都是移除元素的方法,但是remove会将元素自身移除,同时也会移除元素内部的一切,包括绑定的事件及与该元素相关的jQuery数据。 remove比empty好用的地方就是可以传递一个选择器表达式用来过滤将被移除的匹配元素集合,可以选择性的删除指定的节点
detach:移除节点 移除的处理与remove一致 与remove()不同的是,所有绑定的事件、附加的数据等都会保留下来 例如:$(“p”).detach()这一句会移除对象,仅仅是显示效果没有了。但是内存中还是存在的。当你append之后,又重新回到了文档流中。就又显示出来了。
clone()方法时,在将它插入到文档之前,我们可以修改克隆后的元素或者元素内容,如右边代码我 $(this).clone().css(‘color’,’red’) 增加了一个颜色 通过传递true,将所有绑定在原始元素上的事件处理函数复制到克隆元素上 clone()方法是jQuery扩展的,只能处理通过jQuery绑定的事件与数据 元素数据(data)内对象和数组不会被复制,将继续被克隆元素和原始元素共享。深复制的所有数据,需要手动复制每一个
.replaceAll()和.replaceWith()功能类似,主要是目标和源的位置区别 .replaceWith()与.replaceAll() 方法会删除与节点相关联的所有数据和事件处理程序 .replaceWith()方法,和大部分其他jQuery方法一样,返回jQuery对象,所以可以和其他方法链接使用 .replaceWith()方法返回的jQuery对象引用的是替换前的节点,而不是通过replaceWith/replaceAll方法替换后的节点
.wrap()函数可以接受任何字符串或对象,可以传递给$()工厂函数来指定一个DOM结构。这种结构可以嵌套了好几层深,但应该只包含一个核心的元素。每个匹配的元素都会被这种结构包裹。该方法返回原始的元素集,以便之后使用链式方法。
jQuery提供了一个unwarp()方法 ,作用与wrap方法是相反的。将匹配元素集合的父级元素删除,保留自身(和兄弟元素,如果存在)在原来的位置。
.wrapAll()函数可以接受任何字符串或对象,可以传递给$()工厂函数来指定一个DOM结构。这种结构可以嵌套多层,但是最内层只能有一个元素。所有匹配元素将会被当作是一个整体,在这个整体的外部用指定的 HTML 结构进行包裹。
jQuery是一个合集对象,如果想快速查找DOM树中的这些元素的后代元素,此时可以用find()方法,这也是开发使用频率很高的方法。这里要注意 children与find方法的区别,children是父子关系查找,find是后代关系(包含父子关系)
起始位置不同:.closest开始于当前元素 .parents开始于父元素 遍历的目标不同:.closest要找到指定的目标,.parents遍历到文档根元素,closest向上查找,直到找到一个匹配的就停止查找,parents一直查找到根元素,并将匹配的元素加入集合 结果不同:.closest返回的是包含零个或一个元素的jquery对象,parents返回的是包含零个或一个或多个元素的jquery对象
.each() 方法就是一个for循环的迭代器,它会迭代jQuery对象合集中的每一个DOM元素。每次回调函数执行时,会传递当前循环次数作为参数(从0开始计数
注意:在同一元素上同时绑定 click 和 dblclick 事件是不可取的。各个浏览器事件触发的顺序是不同的,一些浏览器在dblclick之前接受两个 click 事件 ,而一些浏览器只接受一个 click 事件。用户往往可通过不同的操作系统和浏览器配置双击灵敏度
mouseenter事件和mouseover的区别 关键点就是:冒泡的方式处理问题 jQuery推荐我们使用 mouseenter事件 mouseenter事件只会在绑定它的元素上被调用,而不会在后代节点上被触发
focus与blur事件:不支持冒泡,focusin与focusout支持冒泡
select事件只能用于< input>元素与< textarea>元素
具体能触发submit事件的行为: < input type=”submit”> < input type=”image”> < button type=”submit”> 当某些表单元素获取焦点时,敲击Enter(回车键) 上述这些操作下,都可以截获submit事件。 这里需要特别注意: form元素是有默认提交表单的行为,如果通过submit处理的话,需要禁止浏览器的这个默认行为 传统的方式是调用事件对象 e.preventDefault() 来处理, jQuery中可以直接在函数中最后结尾return false即可 jQuery处理如下: $(“#target”).submit(function(data) { return false; //阻止默认行为,提交表单 });
在input元素上绑定keydown事件会发现一个问题: 每次获取的内容都是之前输入的,当前输入的获取不到 keydown事件触发在文字还没敲进文本框,这时如果在keydown事件中输出文本框中的文本,得到的是触发键盘事件前的文本,而keyup事件触发时整个键盘事件的操作已经完成,获得的是触发键盘事件后的文本 keypress事件与keydown和keyup的主要区别 只能捕获单个字符,不能捕获组合键 无法响应系统功能键(如delete,backspace) 不区分小键盘和主键盘的数字字符 总而言之, KeyPress主要用来接收字母、数字等ANSI字符,而 KeyDown 和 KeyUP 事件过程可以处理任何不被 KeyPress 识别的击键。诸如:功能键(F1-F12)、编辑键、定位键以及任何这些键和键盘换档键的组合等。
.on( events ,[ selector ] ,[ data ], handler(eventObject) ) 在on的第二参数中提供了一个selector选择器,简单的来描述下 < div class=”left”> < p class=”aaron”> < a>目标节点< /a> //点击在这个元素上 < /p> < /div> 给出如下代码: $(“div”).on(“click”,”p”,fn) 事件绑定在最上层div元素上,当用户触发在a元素上,事件将往上冒泡,一直会冒泡在div元素上。如果提供了第二参数,那么事件在往上冒泡的过程中遇到了选择器匹配的元素,将会触发事件回调函数
event.type:获取事件的类型 触发元素的事件类型 (“a”).click(function(event)alert(event.type);//“click”事件);event.pageX和event.pageY:获取鼠标当前相对于页面的坐标通过这2个属性,可以确定元素在当前页面的坐标值,鼠标相对于文档的左边缘的位置(左边)与(顶边)的距离,简单来说是从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化event.preventDefault()方法:阻止默认行为这个用的特别多,在执行这个方法后,如果点击一个链接(a标签),浏览器不会跳转到新的URL去了。我们可以用event.isDefaultPrevented()来确定这个方法是否(在那个事件对象上)被调用过了event.stopPropagation()方法:阻止事件冒泡事件是可以冒泡的,为防止事件冒泡到DOM树上,也就是不触发的任何前辈元素上的事件处理函数event.which:获取在鼠标单击时,单击的是鼠标的哪个键event.which将event.keyCode和event.charCode标准化了。event.which也将正常化的按钮按下(mousedown和mouseupevents),左键报告1,中间键报告2,右键报告3event.currentTarget:在事件冒泡过程中的当前DOM元素冒泡的当前触发事件的DOM对象,等同于this.this和event.target的区别:js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的目标DOM元素;.this和event.target都是dom对象如果要使用jquey中的方法可以将他们转换为jquery对象。比如this和 (this)的使用、event.target和$(event.target)的使用;
trigger是什么? 简单来讲就是:根据绑定到匹配元素的给定的事件类型执行所有的处理程序和行为 trigger除了能够触发浏览器事件,同时还支持自定义事件,并且自定义时间还支持传递参数
riggerHandler与trigger的用法是一样的,重点看不同之处: triggerHandler不会触发浏览器的默认行为,.triggerHandler( “submit” )将不会调用表单上的.submit() .trigger() 会影响所有与 jQuery 对象相匹配的元素,而 .triggerHandler() 仅影响第一个匹配到的元素 使用 .triggerHandler() 触发的事件,并不会在 DOM 树中向上冒泡。 如果它们不是由目标元素直接触发的,那么它就不会进行任何处理 与普通的方法返回 jQuery 对象(这样就能够使用链式用法)相反,.triggerHandler() 返回最后一个处理的事件的返回值。如果没有触发任何事件,会返回 undefined
show与hide方法是修改的display属性,通过是visibility属性布局需要通过css方法单独设置 如果使用!important在你的样式中,比如display: none !important,如果你希望.show()方法正常工作,必须使用.css(‘display’, ‘block !important’)重写样式 如果让show与hide成为一个动画,那么默认执行动画会改变元素的高度,高度,透明度
淡入的动画原理:操作元素的不透明度从0%逐渐增加到100% 如果元素本身是可见的,不对其作任何改变。如果元素是隐藏的,则使其可见
.animate( properties ,[ duration ], [ easing ], [ complete ] ) .animate( properties, options ) properties:一个或多个css属性的键值对所构成的Object对象。要特别注意所有用于动画的属性必须是数字的,除非另有说明;这些属性如果不是数字的将不能使用基本的jQuery功能。比如常见的,border、margin、padding、width、height、font、left、top、right、bottom、wordSpacing等等这些都是能产生动画效果的。background-color很明显不可以,因为参数是red或者GBG这样的值,非常用插件,否则正常情况下是不能只用动画效果的。注意,CSS 样式使用 DOM 名称(比如 “fontSize”)来设置,而非 CSS 名称(比如 “font-size”)。 特别注意单位,属性值的单位像素(px),除非另有说明。单位em 和 %需要指定使用 除了定义数值,每个属性能使用’show’, ‘hide’, 和 ‘toggle’。这些快捷方式允许定制隐藏和显示动画用来控制元素的显示或隐藏 如果提供一个以+= 或 -=开始的值,那么目标值就是以这个属性的当前值加上或者减去给定的数字来计算的
.animate( properties, options ) options参数 duration - 设置动画执行的时间 easing - 规定要使用的 easing 函数,过渡使用哪种缓动函数 step:规定每个动画的每一步完成之后要执行的函数 progress:每一次动画调用的时候会执行这个回调,就是一个进度的概念 complete:动画完成回调
.stop(); 停止当前动画,点击在暂停处继续开始 .stop(true); 如果同一元素调用多个动画方法,尚未被执行的动画被放置在元素的效果队列中。这些动画不会开始,直到第一个完成。当调用.stop()的时候,队列中的下一个动画立即开始。如果clearQueue参数提供true值,那么在队列中的动画其余被删除并永远不会运行 .stop(true,true); 当前动画将停止,但该元素上的 CSS 属性会被立刻修改成动画的目标值