jQuery学习笔记(一)

绪论

新技术要了解学习,老技术也不能忘,还要查缺补漏。
教程来源:jQuery基础 (一) 样式篇

转换
  1. jQuery对象转成DOM对象:
var $div = $('div');
var div = $div.get(0);
div.style.color = 'red';
  1. DOM对象转成jQuery对象:
var div = document.getElementsByTagName('div');
var $div = $(div);
var $first = $div.first();
$first.css('color', 'red');
jQuery选择器
  1. id选择器:
// 原生
var div = document.getElementById('abc');
div.style.border = "3px solid blue";
// jQuery方式
$("#abc").css("border", "3px solid red");
  1. 类选择器:
// 原生
var divs = document.getElementsByClassName('abc');
for (var i = 0; i < divs.length; i++) {
    divs[i].style.border = "3px solid blue";
}
// jQuery方式
$(".abc").css("border", "3px solid red");
  1. 元素选择器:
// 原生
var p = document.getElementsByTagName('p');
for (var i = 0; i < p.length; i++) {
    p[i].style.border = "3px solid blue";
}
// jQuery方式
$("p").css("border", "3px solid red");
  1. 全选择器:
// 原生
var elements1 = document.getElementsByTagName('*');
// jQuery方式
var elements2 = $("*");
  1. 层级选择器:
$('div > p'):子选择器,div下第一层级p标签
$('div p'):后代选择器,div下所有层级p标签
$(".prev + div"):相邻兄弟选择器,选取prev后面的第一个的div兄弟节点
$(".prev ~ div"):一般兄弟选择器,选取prev后面的所有的div兄弟节点

注意点
1、IE会将注释节点实现为元素,所以在IE中调用getElementsByTagName里面会包含注释节点,这个通常是不应该的。
2、getElementById的参数在IE8及较低的版本不区分大小写。
3、IE7及较低的版本中,表单元素中,如果表单A的name属性名用了另一个元素B的ID名并且A在B之前,那么getElementById会选中A。
4、IE8及较低的版本,浏览器不支持getElementsByClassName。

  1. 基本筛选选择器:在这里插入图片描述

  2. 内容筛选选择器:
    在这里插入图片描述
    注意点
    1、:contains与:has都有查找的意思,但是contains查找包含“指定文本”的元素,has查找包含“指定元素”的元素。
    2、如果:contains匹配的文本包含在元素的子元素中,同样认为是符合条件的。
    3、:parent与:empty是相反的,两者所涉及的子元素,包括文本节点。

  3. 可见性筛选选择器:
    在这里插入图片描述
    隐藏元素的几种方式(以前不知道有这么多):
    1、CSS display的值是none。
    2、type="hidden"的表单元素。
    3、宽度和高度都显式设置为0。
    4、一个祖先元素是隐藏的,该元素是不会在页面上显示。
    5、CSS visibility的值是hidden。
    6、CSS opacity的值是0。

  4. 属性筛选选择器:
    在这里插入图片描述

  5. 子元素筛选选择器:
    在这里插入图片描述
    注意点
    1、:first只匹配一个单独的元素,但是:first-child选择器可以匹配多个:即为每个父级元素匹配第一个子元素。这相当于:nth-child(1)。
    2、:last 只匹配一个单独的元素, :last-child 选择器可以匹配多个元素:即,为每个父级元素匹配最后一个子元素。
    3、如果子元素只有一个的话,:first-child与:last-child是同一个。
    4、:only-child匹配某个元素是父元素中唯一的子元素,就是说当前子元素是父元素中唯一的元素,则匹配。
    5、jQuery实现:nth-child(n)是严格来自CSS规范,所以n值是“索引”,也就是说,从1开始计数,:nth-child(index)从1开始的,而eq(index)是从0开始的。
    6、nth-child(n) 与 :nth-last-child(n) 的区别前者是从前往后计算,后者从后往前计算。

  6. 表单元素选择器:
    在这里插入图片描述

  7. 表单对象属性筛选选择器:
    在这里插入图片描述
    注意点
    1、选择器适用于复选框和单选框,对于下拉框元素, 使用 :selected 选择器。
    2、在某些浏览器中,选择器:checked可能会错误选取到元素,所以保险起见换用选择器input:checked,确保只会选取元素。

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

jQuery的属性与样式
  1. .attr()与.removeAttr():
    attr()有4个表达式
    1)、attr(传入属性名):获取属性的值
    2)、attr(属性名, 属性值):设置属性的值
    3)、attr(属性名,函数值):设置属性的函数值
    4)、attr(attributes):给指定元素设置多个属性值,即:{属性名一: “属性值一” , 属性名二: “属性值二” , … … }
    removeAttr()删除方法

    .removeAttr( attributeName ) : 为匹配的元素集合中的每个元素中移除一个属性(attribute)

    注意点

    dom中有个概念的区分:Attribute和Property翻译出来都是“属性”,《js高级程序设计》书中翻译为“特性”和“属性”。简单理解,Attribute就是dom节点自带的属性

    例如:html中常用的id、class、title、align等

    而Property是这个DOM元素作为对象,其附加的内容,例如,tagName, nodeName, nodeType, defaultChecked, 和 defaultSelected 使用.prop()方法进行取值或赋值等

    获取Attribute就需要用attr,获取Property就需要用prop

  2. html()及.text():
    .html()方法

    获取集合中第一个匹配元素的HTML内容 或 设置每一个匹配元素的html内容,具体有3种用法:

    1)、.html() 不传入值,就是获取集合中第一个匹配元素的HTML内容。
    2)、.html( htmlString ) 设置每一个匹配元素的html内容。
    3)、.html( function(index, oldhtml) ) 用来返回设置HTML内容的一个函数。

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

    .text()方法

    得到匹配元素集合中每个元素的文本内容结合,包括他们的后代,或设置匹配元素集合中每个元素的文本内容为指定的文本内容。,具体有3种用法:

    1)、.text() 得到匹配元素集合中每个元素的合并文本,包括他们的后代。
    2)、.text( textString ) 用于设置匹配元素内容的文本。
    3)、.text( function(index, text) ) 用来返回设置文本内容的一个函数。

    .html与.text的异同:

    1)、.html与.text的方法操作是一样,只是在具体针对处理对象不同。
    2)、.html处理的是元素内容,.text处理的是文本内容。
    3)、.html只能使用在HTML文档中,.text 在XML 和 HTML 文档中都能使用。
    4)、如果处理的对象只有一个子文本节点,那么html处理的结果与text是一样的。
    5)、火狐不支持innerText属性,用了类似的textContent属性,.text()方法综合了2个属性的支持,所以可以兼容所有浏览器。

  3. val()
    .val()方法

    1)、.val()无参数,获取匹配的元素集合中第一个元素的当前值
    2)、.val( value ),设置匹配的元素集合中每个元素的值
    3)、.val( function ) ,一个用来返回设置值的函数

    注意事项

    1)、通过.val()处理select元素, 当没有选择项被选中,它返回null
    2)、.val()方法多用来设置表单的字段的值
    3)、如果select元素有multiple(多选)属性,并且至少一个选择项被选中, .val()方法返回一个数组,这个数组包含每个选中选择项的值

    .html(),.text()和.val()的差异总结

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

  4. 增加样式.addClass()
    .addClass( className )方法

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

    注意点
    .addClass()方法不会替换一个样式类名。它只是简单的添加一个样式类名到元素上。

  5. 删除样式.removeClass()
    .removeClass( )方法

    1)、.removeClass( [className ] ):每个匹配元素移除的一个或多个用空格隔开的样式名。
    2)、.removeClass( function(index, class) ) : 一个函数,返回一个或多个将要被移除的样式名。

    注意点

    如果一个样式类名作为一个参数,只有这样式类会被从匹配的元素集合中删除 。 如果没有样式名作为参数,那么所有的样式类将被移除。

  6. 切换样式.toggleClass()
    .toggleClass( )方法:在匹配的元素集合中的每个元素上添加或删除一个或多个样式类,取决于这个样式类是否存在或值切换属性。即:如果存在(不存在)就删除(添加)一个类:

    1)、.toggleClass( className ):在匹配的元素集合中的每个元素上用来切换的一个或多个(用空格隔开)样式类名。
    2)、.toggleClass( className, switch ):一个布尔值,用于判断样式是否应该被添加或移除。
    3)、.toggleClass( [switch ] ):一个用来判断样式类添加还是移除的 布尔值。
    4)、.toggleClass( function(index, class, switch) [, switch ] ):用来返回在匹配的元素集合中的每个元素上用来切换的样式类名的一个函数。接收元素的索引位置和元素旧的样式类作为参数。

    注意点

    toggleClass是一个互斥的逻辑,也就是通过判断对应的元素上是否存在指定的Class名,如果有就删除,如果没有就增加。
    toggleClass会保留原有的Class名后新增,通过空格隔开。

  7. 样式操作.css()
    .css() 方法:获取元素样式属性的计算值或者设置元素的CSS属性

    获取:

    1)、.css( propertyName ) :获取匹配元素集合中的第一个元素的样式属性的计算值。
    2)、.css( propertyNames ):传递一组数组,返回一个对象结果。

    设置:

    1)、.css(propertyName, value ):设置CSS。
    2)、.css( propertyName, function ):可以传入一个回调函数,返回取到对应的值进行处理。
    3)、.css( properties ):可以传一个对象,同时设置多个样式。

    注意点

    1)、浏览器属性获取方式不同,在获取某些值的时候jQuery采用统一的处理,比如颜色采用RBG,尺寸采用px。
    2)、.css()方法支持驼峰写法与大小写混搭的写法,内部做了容错的处理
    3)、当一个数只被作为值(value)的时候, jQuery会将其转换为一个字符串,并添在字符串的结尾处添加px,例如 .css(“width”,50}) 与 .css(“width”,“50px”})一样。

  8. .css()与.addClass()设置样式的区别
    可维护性

    .addClass()的本质是通过定义个class类的样式规则,给元素添加一个或多个类。css方法是通过JavaScript大量代码进行改变元素的样式。

    通过.addClass()我们可以批量的给相同的元素设置统一规则,变动起来比较方便,可以统一修改删除。如果通过.css()方法就需要指定每一个元素是一一的修改,日后维护也要一一的修改,比较麻烦。

    灵活性

    通过.css()方式可以很容易动态的去改变一个样式的属性,不需要在去繁琐的定义个class类的规则。一般来说在不确定开始布局规则,通过动态生成的HTML代码结构中,都是通过.css()方法处理的。

    样式值

    .addClass()本质只是针对class的类的增加删除,不能获取到指定样式的属性的值,.css()可以获取到指定的样式值。

    样式的优先级

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

    外部样式 < 内部样式 < 内联样式

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

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

    总结

    .addClass与.css方法各有利弊,一般是静态的结构,都确定了布局的规则,可以用addClass的方法,增加统一的类规则。
    如果是动态的HTML结构,在不确定规则,或者经常变化的情况下,一般多考虑.css()方式。

  9. 元素的数据存储
    jQuery提供的存储接口

    jQuery.data( element, key, value ) //静态接口,存数据。
    jQuery.data( element, key ) //静态接口,取数据 。
    jQuery.removeData( element [, name ] ) //删除。

    .data( key, value ) //实例接口,存数据。
    .data( key ) //实例接口,取数据。
    .removeData( [name ] ) //删除。

(若有什么错误,请留言指正,3Q)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值