属性节点处理

按照HTML DOM规范处理属性

.prop()方法用来按照HTML DOM规范获取或设置匹配元素的一个属性的值。该方法与.attr()方法的功能略有些不同。

语法格式如下:

参数propertyName指定要获取或设置的属性名。

参数value指定要设置的属性的值。

参数map指定一个Object对象,其中定义了很多属性及其对应的属性值,这些将被设置到元素作为元素的属性。

参数function(index, oldPropertyValue)指定一个函数,该函数的返回值将用作属性值来设置,函数中的关键字this是当前的元素,该属性在元素属性集合中的索引位置和旧的属性值为参数。

.prop()方法仅仅获取第一个匹配元素的属性值。要单独获取每个匹配元素的属性值,可以使用.each()方法或.map()方法做一个循环。

如果元素没有相应属性,或者匹配的元素集合中没有元素,则返回undefined。

注意, .prop()方法和.attr()方法的不同:

①selectIndex、tagName、nodeName、nodeType、ownerDocumentdefaultChecked  和 defaultSelected  等应该使用.prop()方法获取。

②checked检查应该使用.prop()方法。例如,假定存在一个<input type-“checkbox” checked=”checked”/>,假如该元素引用使用变量elem表示,注意不同版本的jQuery处理的结果可能不同,如下表所示。

因此,在检测控件是否处于选择状态时应该注意,建议使用下面的方法之一:

 注意,对应IE 9之前的版本,在DOM元素被从文档删除之前,如果没有删除属性(使用.removeProp()方法删除),那么在使用.prop()方法为属性定义属性值时,只能使用number、string  和  boolean 类型的值,其他类型的值将会导致内存泄露。

因此,为了安全起见,建议使用.data()方法,这不会导致内存泄露。

删除属性

有两个方法可以为匹配的元素集合中的每个元素删除一个属性,即.removeAttr()方法和.removeProp()方法,语法格式如下:

参数name指定要删除的属性的属性名。

.removeAttr()方法使用Core DOM 规范的removeAttribute()方法来删除属性,但是.removeAttr()方法的优点是能够直接在jQuery对象上调用,而且具有良好的浏览器兼容性。

.removeProp()方法使用delete运算符删除属性,通常这些属性都可以使用点语法访问。下面是.removeProp()方法的核心源代码:

 TIP:

①如果要使用.removeAttr()方法删除  onclick    属性,IE6 ~ IE8 不支持这样做,可以使用.prop()方法来实现:

②对于DOM元素以及window的一些内建属性,如果使用.removeProp()方法对这些属性执行删除操作,浏览器就会抛出异常。针对这内建属性,jQuery不会对它们执行删除操作,而是会为这些属性赋值undefined,并忽略任何异常。

从源代码也可以看出,首先为属性赋值为undefined,而后尝试删除,虽捕捉了异常,但并未对异常作任何处理。

一般来说,没有必要删除内建属性。

不要使用.removeProp()方法删除 checked、disabled、selected 属性,因为一旦删除这些属性将不能再添加,建议使用.prop()方法为这些属性赋属性值为false即可。

对于IE9之前的版本,在DOM元素被从文档删除之前,如果没有删除属性(使用.removeProp()方法删除),那么在使用.prop()方法为属性赋属性值时,只能使用number、string 和 boolean 类型的值,其他类型的值将会导致内存泄露。

因此,为了安全起见,建议使用.data()方法,这不会导致内存泄露。

 

——–文章摘自《jQuery全能权威指南》  清华大学出版社    张亚飞,高红霞 著

发表评论