jQuery知识总结之元素属性与样式的操做

       本篇文章梳理一下jQuery中获取、增长、移除元素的属性;获取、添加元素的文本内容以及操做元素的样式。css

jQuery元素的属性操做---.attr()与.removeAttr()

       原生js中操做特性的DOM方法主要有3个,getAttribute方法、setAttribute方法和removeAttribute方法,就算如此在实际操做中仍是会存在不少问题。而在jQuery中用attr()与removeAttr()就能够所有搞定了,包括兼容问题。html

       jQuery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操做中会常常用到attr()。html5

attr()有4个表达式node

  1. attr(传入属性名):获取属性的值
  2. attr(属性名, 属性值):为匹配的元素集合中的每一个元素设置属性的值
  3. attr(属性名,函数值):为匹配的元素集合中的每一个元素设置属性的函数值
  4. attr(attributes):为匹配的元素集合中的每一个元素设置多个属性值,attribute格式以下:{属性名一: “属性值一” , 属性名二: “属性值二” , … … }

removeAttr()删除方法jquery

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

注意的问题:数组

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

例如:html中经常使用的id、class、title、align等:缓存

<div id="demo" title="实例"></div>
复制代码

而Property是这个DOM元素做为对象,其附加的内容,例如,tagName, nodeName, nodeType,, defaultChecked, 和 defaultSelected,原生js中咱们能够获取DOM节点而后控制台打印DOM节点.__proto__能够 查看。性能优化

在jQuery中咱们可使用.prop()方法进行取值或赋值等。

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

jQuery元素HTML结构与文本内容的操做---.html()及.text()

       读取、修改元素的html结构或者元素的文本内容是常见的DOM操做,jQuery针对这样的处理提供了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) ) 用来返回设置文本内容的一个函数

注意事项:

.text()结果返回一个字符串,包含全部匹配元素的合并文本


.html与.text的异同:

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

jQuery的属性与样式之.val()

jQuery中有一个.val()方法主要是用于处理表单元素的值,好比 input, select 和 textarea。

.val()方法

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

注意事项:

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

multiple 属性规定可同时选择多个选项。<select multiple="multiple">

在不一样操做系统中,选择多个选项的差别:

  • 对于 windows:按住 Ctrl 按钮来选择多个选项
  • 对于 Mac:按住 command 按钮来选择多个选项

.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()均可以使用回调函数的返回值来动态的改变多个元素的内容。

jQuery元素样式的操做---.addClass() .removeClass() .toggleClass()

       在HTML结构中里,多个class以空格分隔,当一个节点(或称为一个标签)含有多个class时,DOM元素响应的className属性获取的不是class名称的数组,而是一个含有空格的字符串,这就使得多class操做变得很麻烦。一样的jQuery开发者也考虑到这种状况,增长了一个.addClass()方法,用于动态增长class类名.

.addClass( className )方法

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

注意事项:

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

jQuery经过.addClass()方法能够很便捷的增长样式。若是须要样式之间的切换,一样jQuery提供了一个很方便的.removeClass(),它的做用是从匹配的元素中删除所有或者指定的class

.removeClass( )方法

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

注意事项

若是一个样式类名做为一个参数,只有这样式类会被从匹配的元素集合中删除 。 若是没有样式名做为参数,那么全部的样式类将被移除

jQuery元素样式的操做---.css()

经过JavaScript获取dom元素上的style属性,咱们能够动态的给元素赋予样式属性。在jQuery中咱们要动态的修改style属性咱们只要使用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"})同样

jQuery的属性与样式之.css()与.addClass()设置样式的区别

addClass与css方法,二者之间有什么区别呢?

可维护性:

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

经过.addClass()咱们能够批量的给相同的元素设置统一规则,变更起来比较方便,能够统一修改删除。若是经过.css()方法就须要指定每个元素是一一的修改,往后维护也要一一的修改,比较麻烦

灵活性:

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

样式值:

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

样式的优先级:

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

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

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

总结:

.addClass与.css方法各有利弊,通常是静态的结构,都肯定了布局的规则,能够用addClass的方法,增长统一的类规则 若是是动态的HTML结构,在不肯定规则,或者常常变化的状况下,通常多考虑.css()方式

jQuery元素的数据存储---.data()

html5 dataset是新的HTML5标准,容许你在普通的元素标签里嵌入相似data-*的属性,来实现一些简单数据的存取。它的数量不受限制,而且也能由JavaScript动态修改,也支持CSS选择器进行样式设置。这使得data属性特别灵活,也很是强大。有了这样的属性咱们可以更加有序直观的进行数据预设或存储。那么在不支持HTML5标准的浏览器中,咱们如何实现数据存取? jQuery就提供了一个.data()的方法来处理这个问题

使用jQuery初学者通常不是很关心data方式,这个方法是jquery内部预用的,能够用来作性能优化,好比sizzle选择中能够用来缓存部分结果集等等。固然这个也是很是重要的一个API了,经常用于咱们存放临时的一些数据,由于它是直接跟DOM元素对象绑定在一块儿的

jQuery提供的存储接口

jQuery.data( element, key, value )   //静态接口,存数据
jQuery.data( element, key )  //静态接口,取数据   
.data( key, value ) //实例接口,存数据
.data( key ) //实例接口,取数据复制代码

2个方法在使用上存取都是通一个接口,传递元素,键值数据。在jQuery的官方文档中,建议用.data()方法来代替。

咱们把DOM能够看做一个对象,那么咱们往对象上是能够存在基本类型,引用类型的数据的,可是这里会引起一个问题,可能会存在循环引用的内存泄漏风险

经过jQuery提供的数据接口,就很好的处理了这个问题了,咱们不须要关心它底层是如何实现,只须要按照对应的data方法使用就好了

一样的也提供2个对应的删除接口,使用上与data方法实际上是一致的,只不过是一个是增长一个是删除罢了

jQuery.removeData( element [, name ] )
.removeData( [name ] )复制代码
相关文章
相关标签/搜索