jQuery学习笔记

【新增】jquery.tmpl.js笔记:

http://www.365mini.com/   [jQuery方法讲解很详细]

https://www.cnblogs.com/zhuzhiyuan/p/3510175.html

https://www.cnblogs.com/think8848/archive/2011/07/17/2108570.html

1: $ = jQuery    $() = jQuery()

【新增】

1、多条件选择器

用途:使用多个条件同时选择多个标签

用法:$(“条件1,条件2,条件3,……,条件n “);

特征:多个条件在“”内用逗号隔开;

用例:$(“div#id,span.tip,p”); //同时选择id为“id”的div标签,class为“tip”的span标签和p标签;

2、相对选择器

用途:使用第二个参数选出相对元素,从而不影响其他具有相同条件的元素

用法:$(“条件1”,条件2);

特征:两个参数

相对选择器 

只要在$()指定第二个参数,第二个参数为相对的元素。比如html代码如下

代码如下:
复制代码
<table id="table1">
<tr><td>dsds</td><td>dsfdef</td></tr>
<tr><td>dsds</td><td>dsfdef</td></tr>
<tr><td>dsds</td><td>dsfdef</td></tr>
<tr><td>dsds</td><td>dsfdef</td></tr>
<tr><td>dsds</td><td>dsfdef</td></tr>
</table> 
复制代码

那么可以用如下的js代码操作td的背景色 
$("td", $(this)).css("background", "red"),//这里也可以是$("td", this).css('background','red');

这句代码用的就是相对选择器,选择出的td是以当前的tr为相对的元素。选择的td元素是当前的tr元素下的所有td元素,没有涉及到其他行的td元素 

代码如下:
复制代码
<script type="text/javascript">
$(function () {
$("#table1 tr").click(function () {
$("td", $(this)).css("background", "red");
});
});
</script> 
复制代码

3、层次选择器

用途:选择后代节点

用法:$(“条件1 条件2 条件3”);

特征:双引号之内,条件之间用空格隔开;

用例:$(“#com ul li”);

//选择Id为com的元素中的UL里面的所有li节点;

jQuery 选择同时包含两个class的元素的实现方法

[javascript] view plain copy
  1. <element class="a b">  

1. 交集选择: $(".a.b")   --选择同时包含a和b的元素。

2. 并集选择:$(".a, .b")  --选择包含a或者包含b的元素。

根据多个属性选择E[attr=val][attr=val] 

[javascript] view plain copy
  1. $("div[title='ttt'][class='aaaa']").click()  

所有div元素下所有属性title值是等于ttt并且属性class等于aaaa的元素

二: 选择元素

0:访问DOM元素。即由jquery对象得到DOM元素,使用.get(n)方法,从0开始。简写方式为$()[n],类似数组用法

1:CSS选择符(多个选择器组合用”,"隔开)

  ①,属性选择符 $('a[href^="mailto:"]')表示href以“mailto:”开头的a元素。同样$表示结尾,*表示通配符。属性可以写多个,如$('a[href$=".pdf"][href*="strive"]')表示href以.pdf结束且含有strive的a元素

  ②,层次选择器

    1,祖先后代选择器(空格)。$(“ancestor descendant”). 返回符合条件的所有的后代元素。

    2,父子选择器( > )。$(“parent > child”)。返回所有符合条件的子元素。(子元素只有一辈,后代元素有很多辈)。

    3,隔壁选择器 (+)(后向)。$(“prev + next”)。返回同辈中 紧邻在prev元素之后的next元素。注意:只返回一个next,且要求prev和next同辈。 【效果类似next()方法】

    4,邻居选择器(~)(后向)。$(“prev ~ siblings”)。返回在prev元素之后所有同辈元素。 【效果类似nextAll()方法】

    

2: 在1中CSS选择符基础上进一步过滤

  用在CSS选择器后面,进一步筛选,语法类似CSS中的伪类,以冒号(:)开头。
     ①, :eq(n) 第n个,从0开始计数

           ②, :even/:odd 偶/奇

   ③, :nth-child(),参数可为数字或者odd/even,这是jQuery中唯一从1开始计数的选择器。(注意:浏览器选择时是从右向左的)

    ④, :contains() 参数为字符串,可以不加引号,也可以加引号,区分大小写

      ⑤, :not() 否定式伪类选择符. 参数为选择符,可以不加引号,也可以加引号。如:not(.classname)。

      ⑥, :has()。参数为选择符,可以不加引号,也可以加引号。匹配含有选择器所匹配的元素的元素。如

           $("div:has('p')").返回包含p标签的div标签
   ⑦,:hidden 这个选择器可以单独使用,$(':hidden'),也可以在css选择符之后之后,$('p:hidden')。

        :hidden 选择器选取隐藏的元素。

       以下几种情况的元素是隐藏元素:

      •     设置为 display:none
      •     带有 type="hidden" 的表单元素
      •     width 和 height 设置为 0
      •     隐藏的父元素(这也会隐藏子元素)

      注释:该选择器对 visibility:hidden 和 opacity: 0 的元素不起作用。

  ⑧,:input 获取表单,不只是input表单,还包括<select><textarea><button>。而input标签选择器只获取input表单。
  ⑨,:text,:password,:checkbox,:radio,:submit,:file,:image,:reset,:button,等等,获取input标签中的特定类型的表单  
  ⑩, :checked; :selected.匹配所有选中的被选中元素(复选框、单选框,select中的option),对于select元素来说,获取选中推荐使用:selected

3: DOM遍历方法(筛选)

  ①  filter()方法。筛选出与指定表达式匹配的元素集合。这个方法用于缩小匹配的范围。用逗号分隔多个表达式(同多个CSS选择器).参数可接受函数

  ②  next()方法。返回下一个紧邻的同辈元素,(效果类似于CSS选择符中的隔壁选择器)

       nextAll()方法。返回后面所有的同辈元素,(效果类似于CSS选择符中的邻居选择器)

     prev()方法。返回前一个紧邻的同辈元素,

       prevAll()方法。返回前面所有的同辈元素,

       siblings()方法。返回所有的同辈元素。

     parent()方法。返回唯一的父元素,

       parents()方法。返回所有的直系祖先元素,(父元素只有一个,祖先元素可有很多)。沿 DOM 树向上遍历,直到文档的根元素为止,将每个祖先元素添加到一个临时的集合;如果应用了选择器,则会基于该选择器对这个集合进行筛选。

    closest(‘selector’)方法。获得匹配选择器的第一个直系祖先元素。

    closest和parents的主要区别是:1,前者从当前元素开始匹配寻找,后者从父元素开始匹配寻找;2,前者逐级向上查找,直到发现匹配的元素后就停止了,后者一直向上查找直到根元素,然后把这些元素放进一个临时集合中,再用给定的选择器表达式去过滤;3,前者返回0或1个元素,后者可能包含0个,1个,或者多个元素。

       children()方法。返回所有的子元素。(注意:只返回子元素,子元素之后的后代元素不选择【可用CSS选择符中的后代选择器】)

         .find() 和 .children() 方法类似,不过后者只沿着 DOM 树向下遍历单一层级。

   

  ③  addBack()方法。jQuery对象维护一个堆栈内部来跟踪匹配的元素集合的变化。当一个DOM遍历方法被调用时,新的元素集合推入到堆栈中。

   如果还需要包含先前的元素集合,.addBack() 可以提供帮助。考虑一个页面,一个简单的列表就可以了:

                <ul>
                  <li>list item 1</li>
                  <li>list item 2</li>
                  <li class="third-item">list item 3</li>
                  <li>list item 4</li>
                  <li>list item 5</li>
                </ul>

                下面的代码的返回结果是后面3,4和5项是一个红色的背景:

                $('li.third-item').nextAll().addBack().css('background-color', 'red');

  首先,初始选择位于第3项,初始化堆栈集合只包含这项。调用.nextAll() 后将第4和第5项推入堆栈。

  最后,调用.addBack() 合并这两个组元素在一起,创建一个jQuery对象,指向所有三个项元素(按照

  文档中的顺序):{[<li.third-item>,<li>,<li> ]}

  ④:end()方法。回到最近的一个"破坏性"操作之前。即,将匹配的元素列表变为前一次的状态。

  如果之前没有破坏性操作,则返回一个空集。所谓的"破坏性"就是指任何改变所匹配的jQuery元素的操作。

  这包括在 Traversing 中任何返回一个jQuery对象的函数--'add', 'andSelf','children', 'filter', 'find', 'map', 'next', 'nextAll', 'not', 'parent','parents', 'prev', 'prevAll', 'siblings' and 'slice'--再加上 Manipulation 中的 'clone'。

          例子: 

            $('td:contains(Henry)') //取得包含Henry的所有单元格
            .parent() //取得它的父元素
            .find('td:eq(1)') //在父元素中查找第2个单元格
            .addClass('highlight') //为该单元格添加hightlight类
            .end() //恢复到包含Henry的单元格的父元素
            .find('td:eq(2)') //在父元素中查找第3个单元格
            .addClass('highlight'); //为该单元格添加hightlight类

  ⑤:find()方法。搜索所有与指定表达式匹配的元素,返回后代元素。这个函数是找出正在处理的元素的后代元素的好方法。.find() 和 .children() 方法类似,不过后者只沿着 DOM 树向下遍历单一层级。

  ⑥:hasClass()方法。

    参数为类名,必须加引号。检查选择的元素集合中是否含有某个特定的类,如果有(至少有一个就可以),则返回

    true,否则返回false.  注意如果查找到的元素是父元素,那么只在父元素中查找是否含有类,不涉及它的子元素。

  ⑦:is()方法。这个也可以代替hasClass()方法,它比hasClass()方法更灵活,可以接受任何选择符表达式。

    根据选择器、DOM元素或 jQuery 对象来检测匹配元素集合,如果其中至少有一个元素符合这个给定的表达式就

    返回true,否则返回false。【单个元素就是 是不是,元素集合就是 包不包含】。

    注意(同上):如果查找到的元素是父元素,那么只在父元素中查找是否含有参数表达式,不涉及它的子元素。

    经验:要加引号。多个选择器可以用逗号隔开。

三:事件,

1,为了保证JavaScript代码执行以前页面已经应用了样式,最好是在 <head>元素中把 <link rel="stylesheet"> 标签

  和 <style> 标签放在 <script> 标签前面。 

2,每次调用$(document).ready()都会向内部的行为队列中添加一个新函数,当页面加载完成后,所有函数都会被执行。

  而且,这些函数会按照注册它们的顺序依次执行。通过window.onload虽然也可以注册多个函数,但却不能保证按顺序执行。

3,向.ready()回调函数中传入参数

  在某些情况下,可能有必要在同一个页面中使用多个JavaScript库。由于很多库都使用$标识
  符(因为它简短方便)
  ,因此就需要一种方式来避免名称冲突。
  为解决这个问题,jQuery提供了一个jQuery.noConflict()方法,调用该方法可以把对$
  标识符的控制权让渡还给其他库。使用jQuery.noConflict()方法的一般模式如下:
  <script src="prototype.js"></script>
  <script src="jquery.js"></script>
  <script>
  jQuery.noConflict();
  </script>
  <script src="myscript.js"></script>
  首先,包含jQuery之外的库(这里是Prototype)
  。然后,包含jQuery库,取得对$的使用权。
  接着,调用.noConflict()方法让出$,以便将控制权交还给最先包含的库(Prototype)
  。这样
  就可以在自定义脚本中使用两个库了——但是,
  在需要使用jQuery方法时,
  必须记住要用jQuery
  而不是$来调用。
  在这种情况下,
  还有一个在.ready()方法中使用$的技巧。
  我们传递给它的回调函数可以接
  收一个参数——jQuery对象本身。利用这个参数,可以重新命名jQuery为$,而不必担心造成冲
  突,如下面的代码所示:
  jQuery(document).ready(function($) {
  //在这里,可以正常使用!
  });
  或者,也可以使用刚刚介绍的简写语法:
  jQuery(function($) {
  //使用$的代码
  });

4,toggleClass(class|fn [,switch])方法。

    如果存在(不存在)就删除(添加)一个类。

    有两个参数,第一个参数是类名(必须加引号),同时也可以一个返回类名的回调函数。第二个参数是可选的,其返回值是true 或者 false。

    如果是true,则为选中的元素添加指定的类;如果是false,则为选中的元素去除指定的类。

    一个例子:此例当count的值为3的倍数时,第二个参数返回true,将会添加参数一中返回的类;不是3的倍数时,移除参数一中的类       

                var count = 0;
                $('div.foo').toggleClass(function() {                  if ($(this).parent().is('.bar') {                    return 'happy';                   } else {                  return 'sad';                 }                 },count++ % 3 == 0);

5,事件目标。

  事件处理程序中的变量event保存着事件对象。而event.target属性保存着发生事件的目标元素(属于DOM元素)。通俗理解就是实际被点击的具体元素

  关于this:当触发任何事件处理程序时,关键字this引用的都是处理事件的DOM元素,也就是代码中事件前的DOM元素,而且有两点要说明:①如果事件前的
  元素是一个父元素,那么this具体就只指代这个元素,它的子元素是不包含在this里的。②如果事件前的是元素集合,那么this实际指代的是其中真正执行事
  件的那一个元素

6,阻止事件传播;阻止默认行为。event.stopPropagation();event.preventDefault();

  如果想要同时停止事件传播和默认操作,可以在事件处理程序中返回false,这是对在事件对象(event)上同时调用 .stopPropagation() 和 .preventDefault()的一种简写方式。

7,事件委托

  原理;在DOM中的一个祖先元素上指定一个单击处理程序。由于事件会冒泡,未遭拦截的单击事件最终会

     到达这个祖先元素,而我们可以在此时再作出相应处理(通过条件语句

      【如$(event.target).is('button')=>返回真或假】过滤出需要进行行为的子元素)。

  jquery内置事件委托方法:on()方法。详细请点击此链接            off()方法详情点击此链接

              on()简单介绍:(总共可以传四个参数)

                      如果给.on()方法传入的第二个参数是一个选择符表达式,jQuery会把click事件处理程序
                    绑定到#switcher对象,同时比较event.target和选择符表达式(这里的'button')。如果匹
                    配,jQuery会把this关键字映射到匹配的元素,否则不会执行事件处理程序。

                   off()简单介绍:(总共可以传三个参数),理解为on()方法的反方法,解除(符合条件的)事件绑定

  事件绑定一点说明: 当在jQuery中把处理程序绑定到事件时,之前绑定的处理程序仍然有效,事件会有个累加效果。注意区分

            事件个数的累加和 每个事件次数的累加。 one()方法表示事件触发一次,随后立即解除绑定。

 8,模拟用户操作:

  trigger()方法:$().trigger('click')触发click事件,简写方式为$().click(),不加参数表示触发事件而不是绑定行为

9,响应键盘事件: 1   对按键响应keyup keydown(keyCode),按了哪个键

              对文本输入响应keypress(charCode), 输入了什么内容

          2    event.which(which属性对DOM原生的event.keyCodeevent.charCode进行了标准化。)

          3  which:     http://www.365mini.com/page/jquery-event-which.htm

          4  String.fromCharCode();参数为Unicode字符值,返回字符串。没有传入参数则返回空字符串

          此函数属于静态函数,而且只能够通过全局String对象进行调用不能通过String对象的实例进行调用。

          5:鼠标位置:event.pageX   event.clientX  event.offsetX  event.originalEvent.x 

            详情参见:   http://www.cnblogs.com/everest33Tong/p/5951200.html

         6:mousedown、mouseup、click 执行顺序是从左到右的,更重要的是一旦mousedown事件激活,

          正常情况下后面两个事件也肯定会被激活。mousemove 事件在是一直在元素上运行的。

            一个例子:使用.mousedown()和.mouseup()跟踪页面中的鼠标事件。如果鼠标按键在按下 它的地方被释放,

                 则为所有段落添加hidden类。如果是在按下它的地方之下被释放的, 删除所有段落的hidden类。

                                   var u_Y, d_Y;
$(document).mousedown(function (e) {
d_Y = e.pageY;
})
.mouseup(function (e) {
u_Y = e.pageY;
if (u_Y < d_Y) {
$("p").removeClass('hidden');
}; //按下后在下面释放
if (u_Y == d_Y) {
$('p').addClass('hidden');
}
});

10,获取元素绑定了那些事件 

在1.8.0版本之前,我们要想获取某个DOM绑定的事件处理程序可以这样: 
$.data(domObj,'events');//或者$('selector').data('events')

而从1.8.0版本开始,jQuery突然不支持这样使用了,而是改到了一个叫'_data'的函数功能上了,即,1.8.0及以后的版本你可以这么用:
$._data(domObj,'events');//注意,这里不能像$('selector')._data('events')这样用了。
 要想写出兼容兼容各个jQuery版本的方式,这样获取即可:
 var eventsData = $.data(domObj,'events') || $._data(domObj,'events');//这个改变在easyui 1.3.1的源码中也有体 
 ps
1.接受的domObj节点必须为dom节点对象,不能为jquery对象,如果是获取的jquery对象,要用get(0)或者[0]转为dom对象
2.只能获取到使用jquery方法绑定的参数 on ,live 等。如果是直接写到元素上的事件是不能获取的,使用其他非jquery设置的事件也是无法获取的

四:样式与动画

1,以下方法都是通过设置display属性实现的。

  前者,display: none; 后者,display: 上一个display属性值。

                     

          这些函数的参数可以很复杂,具体详细用法参见此链接

    对于jQuery提供的任何效果,都可以指定两种预设的速度参数: 'slow' 和 'fast' 。使
    用.show('slow')会在600毫秒(0.6秒)内完成效果,而.show('fast')则是200毫秒(0.2秒)。
    如果传入的是其他字符串( 一般是normal ),jQuery就会在默认的400毫秒内完成效果。
    要指定更精确的速度,可
以使用毫秒数值,例如.show(850)。注意,与字符串表示的速度
    参数名称不同,数值不需要使用引号。

 hide(),show()     ==========    jQuery复合效果方法 toggle()

        例如.hide('duration')【duration可以为 slow 或 fast 或 normal】方法,会同时减少元素的
     高度、宽度和不透明度,直至这3个属性的值都达到0,与此同时会为该元素应用CSS规则
display:none。
        而.show(' duration ')方法则会从上到下增大元素的高度,从左到右增大
元素的宽度,
        同时从0到1增加元素的不透明度,直至其内容完全可见。

   fadeOut(),fadeIn()        =========== jQuery复合效果方法  fadeToggle()

             逐渐地增大其不透明度。会在一开始就设置元素尺寸

 slideUp(),slideDown()     ===========  jQuery复合效果方法 slideToggle()

                      这两个动画方法仅改变元素的高度 , 实现垂直滑入的效果

2,fadeTo()方法:   $(selector).fadeTo( speed,opacity[,easing,callback] )

            经测试,speed和opacity参数是必须的。         

    把所有匹配元素的不透明度以渐进方式调整到指定的不透明度,并在动画完成后可选地触发一个回调函数。

    这个动画只调整元素的不透明度,也就是说所有匹配的元素的高度和宽度不会发生变化。

 3,创建自定义动画

  ①.animate()方法(测试浏览器 chromium):点此查看.animate()更详细的用法

    ①除非你为属性值指定了单位(例如:px、em、%),否则默认的数值单位为像素(px)。

    ②对于border等一些属性,只有原来设置了初始值,动画才能生效 。

    ③对于left top等属性,和在css中一样,要设置pisition属性为 非static(即默认的position值)  的时候动画才生效
              所有块级元素默认的CSS定位属性都是static,这个值精确地表明:在改变元素的定位属性之前试图移动它们,它们只会保持静止不动。

    ④color,background-color等属性无法用于动画(除非使用jQuery.Color()插件)

    ⑤fontSize 或者 font-size都可以。

    ⑥还可以将css属性值设为一些特定的字符串,例如:"show"、"hide"、"toggle",则jQuery会调用该属性默认的动画形式。

    ⑦css属性值也可以是相对的,你可以为属性值加上前缀"+="或"-=",以便于在原来的属性值上增加或减少指定的数值。
     例如:{ "height": "+=100" }【省略了单位,默认为px】,表示在原有高度的基础上增加100px。
        因为涉及特殊字符问题,所以必须以字符串形式指定相对值,也就是说必须把值放到一对括号内

     ②  并发效果:效果同时发生,把所有属性都放在animate()的第一个对象参数里即可实现并发效果

         排队效果:即让效果一个接一个地发生

        (1) 一组元素上的效果:

           当在一个.animate()方法中以多个属性的方式应用时,是同时发生的;

           当以方法连缀的形式应用时,是按顺序发生的(排队效果)——除非queue选项值为false。
           但是排队不能自动应用到其他的非效果方法,如.css()。可使用queue()方法加入排队,例如:
                 

                      .queue(function(next) {
                        $switcher.css({backgroundColor: '#f00'});
                        next();
                                                           })

            其中的next参数可以为任何其他参数,如aaaa,保持一致即可,如aaaa()。如果不加这个参数             
              动画到这里就会中断,queue()方法后面连缀的方法都将无法实现。

           (2) 多组元素上的效果:

           默认情况下是同时发生的;
           当在另一个效果方法或者在.queue()方法的回调函数中应用时,是按顺序发生的(排队效果)。

五:操作DOM

1,attr(),removeAttr()  获取、设置、移除 HTML文档属性.例 attr('placeholder','xxx')注意placeholder时val()要为空

2,prop(),removeProp() 获取、设置、移除 DOM属性

3,val()  获取、设置表单控件的值。 三者用法区别与联系,点此链接 

4,创建元素

  $()除了可以选择DOM,还可以创建DOM,如$('<a href="#top">back to top</a>')将会创建一个dom元素

5,插入新元素。

  insertBefore(),insertAfter(),prependTo(),appendTo() ///

  \ before(),after(),prepend(),append()

$(A).insertBefore(B) 在B元素外部、之前添加$(A);

  如果$(A)是当前页面中的某些元素,那么这些元素将从原位置上消失。简而言之,这相当于一个移动操作,而不是复制操作,以下都一样
$(A) .prependTo(B)  在B元素内部、之前添加$(A);
$(A) .appendTo(B)   在B元素内部、之后添加$(A);
$(A) .insertAfter(B)   在B元素外部、之后添加$(A)。

$(A).before(B)    在$(A)外部、前面添加B; 

$(A).after(B)        在$(A)外部、后面添加B;

$(A).prepend(B)   在$(A)内部、前面添加B;

$(A).append(B) 在$(B)内部、后面添加B;

6,包装元素 

  wrap(),wrapAll(),unwrap().在匹配元素外层添加指定的DOM。详细用法点此链接

7,显示迭代

  .each()。----> 详细用法点此链接   <----注意与另一个全局$.each()函数区分

8, 复制元素 

  .clone()。返回当前jQuery对象的一个克隆副本点此查看详细用法

9, 要用新元素或文本替换每个匹配的元素,使用:

 .html()
 .text()  
 .replaceAll()
 .replaceWith() 

      设置操作返回当前jquery对象,读取操作返回读取的字符串

10,要移除每个匹配的元素中的元素,使用:
 .empty()   jQuery.empty() 函数详解

  $().empty() 等价于 $().html('')

11,要从文档中移除每个匹配的元素及其后代元素,但不实际删除它们,使用:
 .remove()    jQuery.remove() 函数详解

 .detach()    jQuery.detach() 函数详解

 

原文地址:https://www.cnblogs.com/everest33Tong/p/5942761.html