一:初识 jquery:

1、 jQuery 只是一个库,不需要特别的安装,只需要我们在页面 <head> 标签内中通过 script 标签脚本引入 jQuery 库即可。

 <script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
<!-- 使用jQuery语法 -->
    <script type="text/javascript">

        $(document).ready(function() {
             // jquery 代码 ....
        });
    </script>
通过标准的JavaScript操作DOM与jQuyer操作DOM的对比,我们不难发现:
通过jQuery方法包装后的对象,是jQuery对象,它是一个新的对象
jQuery与DOM对象完全不是同一个东西,但是又似曾相似,因为他们都能处理DOM
通过jQuery处理DOM的操作,可以让开发者更专注业务逻辑的开发,而不需要我们
具体知道哪个DOM节点有那些方法,也不需要关心不同浏览器的兼容问题,
我们可以通过jQuery更友好的API进行开发,同时代码也会更加精短

2、jQuery对象转换成 DOM 对象

ps : jQuery 是 一个类数组对象,而 DOM 对象是一个单独的DOM 元素

//HTML代码
<div>元素一</div>
<div>元素二</div>
<div>元素三</div>

//JavaScript代码
var $div = $('div') //jQuery对象
var div = $div[0] //转化成DOM对象
div.style.color = 'red' //操作dom对象的属性

//通过jQuery自带的get()方法
//jQuery对象自身提供一个.get() 方法允许我们直接访问jQuery对象中相关的DOM节点,
//get方法中提供一个元素的索引:

var $div = $('div') //jQuery对象
var div = $div.get(0) //通过get方法,转化成DOM对象
div.style.color = 'red' //操作dom对象的属性

$('div') 语句得到的是 一个类数组对象,里面存放着多个 dom 元素

3、将 Dom 对象 转换成 jQuery 对象 ,转换后的对象能执行所有jQuery 方法。

//HTML代码
<div>元素一</div>
<div>元素二</div>
<div>元素三</div>
//JavaScript代码
var div = document.getElementsByTagName('div'); //dom对象
var $div = $(div); //jQuery对象
var $first = $div.first(); //找到第一个div元素
$first.css('color', 'red'); //给第一个元素设置颜色

div 得到的是 Dom 集合对象,有三个div元素,通过 $(div)转换成 jquery 对象;

4、选择器

4.1选择器:
$( "#id" )  // jQuery内部使用JavaScript函数document.getElementById()来处理ID的获取。
$( ".class" )   // class 选择器
$( "element" ) // 节点选择器

4.2层级选择器:

clipboard.png

$('div > p') div 里面的 第一个 p 元素 子选择器、

$('div p') div 里面的 所有 p 元素 后代选择器、

$(".prev + div") 跟 类 .prev 同级的 第一个兄弟元素 相邻兄弟选择器、

$(".prev ~ div") 跟 类 .prev 同级的 所有兄弟元素 一般兄弟选择器

4.3基本筛选选择器:不是 css规范 是 jquery 扩展的

clipboard.png

$(".div:first") class为div的第一个元素 $(".div:last") class为div的最后一个元素
$(".div:even") class为div的 偶数 元素 $(".div:odd") class为div的 奇数 元素

$(".aaron:eq(2)") class为 aaron 的 第三个元素 $(".aaron:gt(3)") class为
aaron 的 大于 4的所有元素 $(".aaron:lt(2)") class为 aaron 的 小于 3的所有元素

$("input:not(:checked) + p") 所有 没被选中的 input 元素

4.4 内容筛选选择器:

clipboard.png

4.5 可见性筛选选择器:

clipboard.png

4.6 属性选择器:

clipboard.png

在这么多属性选择器中[attr="value"]和[attr*="value"]是最实用的
[attr="value"]能帮我们定位不同类型的元素,特别是表单form元素的操作,比如说input[type="text"],input[type="checkbox"]等
[attr*="value"]能在网站中帮助我们匹配不同类型的文件

4.7 表单元素选择器:这个在表单提交还是挺有用的!

clipboard.png

$(':input') :input 选择器基本上选择所有表单控件
$('input:text')
$('input:password')
$('input:radio')
$('input:checkbox')
$('input:submit')
$('input:image')
$('input:button')
$('input:file')

4.8 表单对象属性选择器:主要是对所选的表单元素进行筛选:

clipboard.png

$('input:enabled')
$('input:disabled')
$('input:checked')
$('option:selected')

4.9 特殊选择器 this:
$(this) 和 this 有什么区别呢?
this 是 javascript 的 关键字,只当前的上下文对象,简单的说就是 方法和 属性的所有者。
如下:

var SF = {
    name:"SFxx",
    getName:function(){
        //this,就是imooc对象
        return this.name;
    }
}
imooc.getName(); //SFxx

或是如下:

p.addEventListener('click',function(){
    //this === p
    //以下两者的修改都是等价的
    this.style.color = "red";
    p.style.color = "red";
},false);

但是 使用 this 不能很好的操作 Dom ,所以可以将其转换成 jquery 对象! var $this= $(this)

$('p').click(function(){
    //把p元素转化成jQuery的对象
    var $this= $(this) 
    $this.css('color','red')
})

总体:
this,表示当前的上下文对象是一个html对象,可以调用html对象所拥有的属性和方法。
$(this),代表的上下文对象是一个jquery的上下文对象,可以调用jQuery的方法和属性值。

二: jQuery的属性与样式

1、.attr() 与 .removeAttr

attr()有4个表达式
attr(传入属性名):获取属性的值
attr(属性名, 属性值):设置属性的值
attr(属性名,函数值):设置属性的函数值
attr(attributes):给指定元素设置多个属性值,即:{属性名一: “属性值一” , 
属性名二: “属性值二” , … … }
removeAttr()删除方法
.removeAttr( attributeName ) : 为匹配的元素集合中的每个元素中移除一个属性(attribute)

还可以利用 方法作为参数回调:

  <script type="text/javascript">
        //找到第三个input,通过使用一个函数来设置属性
        //可以根据该元素上的其它属性值返回最终所需的属性值
        //例如,我们可以把新的值与现有的值联系在一起:
        $("input:eq(2)").attr('value',function(i, val){
            return '通过function设置' + val
        })
    </script>

2、html() 和 text():

.html()方法 
获取集合中第一个匹配元素的HTML内容 或 设置每一个匹配元素的html内容,具体有3种用法:
.html() 不传入值,就是获取集合中第一个匹配元素的HTML内容
.html( htmlString )  设置每一个匹配元素的html内容
.html( function(index, oldhtml) ) 用来返回设置HTML内容的一个函数

.htm()方法内部使用的是DOM的innerHTML属性来处理的,所以在设置与获取上需要注意的一个最重要的问题,这个操作是针对整个HTML内容(不仅仅只是文本内容)

.text()方法

得到匹配元素集合中每个元素的文本内容结合,包括他们的后代,
或设置匹配元素集合中每个元素的文本内容为指定的文本内容。,具体有3种用法:
.text() 得到匹配元素集合中每个元素的合并文本,包括他们的后代
.text( textString ) 用于设置匹配元素内容的文本
.text( function(index, text) ) 用来返回设置文本内容的一个函数

3 .val();

jQuery中有一个.val()方法主要是用于处理表单元素的值,
比如 input, select 和 textarea。
.val()方法
.val()无参数,获取匹配的元素集合中第一个元素的当前值
.val( value ),设置匹配的元素集合中每个元素的值
.val( function ) ,一个用来返回设置值的函数

.html(),.text()和.val()的差异总结:  
.html(),.text(),.val()三种方法都是用来读取选定元素的内容;只不过.html()是用来读取元素的html内容(包括html标签),.text()用来读取元素的纯文本内容,包括其后代元素,.val()是用来读取表单元素的"value"值。其中.html()和.text()方法不能使用在表单元素上,而.val()只能使用在表单元素上;另外.html()方法使用在多个元素上时,只读取第一个元素;.val()方法和.html()相同,如果其应用在多个元素上时,只能读取第一个表单元素的"value"值,但是.text()和他们不一样,如果.text()应用在多个元素上时,将会读取所有选中元素的文本内容。
.html(htmlString),.text(textString)和.val(value)三种方法都是用来替换选中元素的内容,如果三个方法同时运用在多个元素上时,那么将会替换所有选中元素的内容。
.html(),.text(),.val()都可以使用回调函数的返回值来动态的改变多个元素的内容。

4、新增样式 .addClass();

.addClass( className )方法
.addClass( className ) : 为每个匹配元素所要增加的一个或多个样式名
.addClass( function(index, currentClass) ) : 这个函数返回一个或更多
用空格隔开的要增加的样式名

下面是通过 函数返回一个或多个 className ,
.addClass(函数), 函数内部会执行循环操作,遍历 所有查找到的 ‘div’元素, 元素的索引 为参数index,元素的 className 为 className;

      $("div").addClass(function(index,className) {
                    //找到类名中包含了imooc的元素
                    if(-1 !== className.indexOf('bb')){
                        //this指向匹配元素集合中的当前元素
                        $(this).addClass('imoocClass')
                    }
                });

5、 删除样式 .removeClass();

.removeClass( )方法
.removeClass( [className ] ):每个匹配元素移除的一个或多个用空格隔开的样式名
.removeClass( function(index, class) ) : 一个函数,返回一个或多个将要被移除的样式名
注意事项
如果一个样式类名作为一个参数,只有这样式类会被从匹配的元素集合中删除 。 如果没有样式名作为参数,那么所有的样式类将被移除

当函数内部没有 return (return 'imoocClass';)时, 那么 函数只是做遍历操作,没有真正移除 className ,只有 return 了,才将 return 的 className 移除。

  //.removeClass() 方法允许我们指定一个函数作为参数,返回将要被删除的样式
        $('.right > div:first').removeClass(function(index,className){
            
            //className = aa bb imoocClass
            //把div的className赋给下一个兄弟元素div上作为它的class
            $(this).next().addClass(className)
            //删除自己本身的imoocClass
            return 'imoocClass';
        })

6、 切换样式 .toggleClass(); 存在 className 就 删除 , 不存在就添加

.toggleClass( )方法:在匹配的元素集合中的每个元素上添加或删除一个或多个样式类,取决于这个样式类是否存在或值切换属性。即:如果存在(不存在)就删除(添加)一个类
.toggleClass( className ):在匹配的元素集合中的每个元素上用来切换的一个或多个(用空格隔开)样式类名
.toggleClass( className, switch ):一个布尔值,用于判断样式是否应该被添加或移除
.toggleClass( [switch ] ):一个用来判断样式类添加还是移除的 布尔值
.toggleClass( function(index, class, switch) [, switch ] ):用来返回在匹配的元素集合中的每个元素上用来切换的样式类名的一个函数。接收元素的索引位置和元素旧的样式类作为参数

注意事项:

toggleClass是一个互斥的逻辑,也就是通过判断对应的元素上是否存在指定的Class名,如果有就删除,如果没有就增加
toggleClass会保留原有的Class名后新增,通过空格隔开
//第二个参数判断样式类是否应该被添加或删除
    //true,那么这个样式类将被添加;
    //false,那么这个样式类将被移除
    //所有的奇数tr元素,应该都保留class="c"样式
    $("#table tr:even").toggleClass("c", true); //这个操作没有变化,因为样式已经是存在的

7、 样式操作 .css();

css() 方法:获取元素样式属性的计算值或者设置元素的CSS属性
获取:
.css( propertyName ) :获取匹配元素集合中的第一个元素的样式属性的计算值
.css( propertyNames ):传递一组数组,返回一个对象结果
设置:
 .css(propertyName, value ):设置CSS
.css( propertyName, function ):可以传入一个回调函数,返回取到对应的值进行处理
.css( properties ):可以传一个对象,同时设置多个样式

容错处理 :例如 .css("width",50}) 与 .css("width","50px"})一样.

//获取尺寸,传入CSS属性组成的一个数组

    //{width: "60px", height: "60px"}    
    var value = $('.first').css(['width','height']);
//合并设置,通过对象传设置多个样式
    $('.seventh').css({
        'font-size'        :"15px",
        "background-color" :"#40E0D0",
        "border"           :"1px solid red"
    })

//获取到指定元素的宽度,在回调返回宽度值 函数方式

    //通过处理这个value,重新设置新的宽度
    $('.sixth').css("width",function(index,value){
        //value带单位,先分解
        value = value.split('px');
        //返回一个新的值,在原有的值上,增加50px
        return (Number(value[0]) + 50) + value[1];
    })

8、 .addClass() 和 .css(); 的区别

样式的优先级:

css的样式是有优先级的,当外部样式、内部样式和内联样式同一样式规则同时应用于同一个元素的时候,优先级如下
外部样式 < 内部样式 < 内联样式

.addClass()方法是通过增加class名的方式,那么这个样式是在外部文件或者内部样式中先定义好的,等到需要的时候在附加到元素上
通过.css()方法处理的是内联样式,直接通过元素的style属性附加到元素上的

通过.css方法设置的样式属性优先级要高于.addClass方法

9、 元素的数据储存,还挺有用的,可以将一些临时数据存储到 元素中

  <script type="text/javascript">
    $('.left').click(function() {
        var ele = $(this);
        //通过$.data方式设置数据
        $.data(ele, "a", "data test")
        $.data(ele, "b", {                 //通过对象的方式
            name : "SFxxx"
        })
        //通过$.data方式取出数据
        var reset = $.data(ele, "a") + "</br>" + $.data(ele, "b").name
        ele.find('span').append(reset)
    })
    </script>
jQuery提供的存储接口
jQuery.data( element, key, value )   //静态接口,存数据
jQuery.data( element, key )  //静态接口,取数据   
.data( key, value ) //实例接口,存数据
.data( key ) //实例接口,存数据
同样的也提供2个对应的删除接口,使用上与data方法其实是一致的,只不过是一个是增加一个是删除罢了
jQuery.removeData( element [, name ] )
.removeData( [name ] )

曾田生z
427 声望34 粉丝

立法者三句修改的话,全部藏书就会变成废纸。——律匠