JQuery的attr 与 val区别


Posted in Javascript onJune 12, 2016

.attr(attributeName)

attributeName:需要获取属性的名称。

获取匹配集中第一个元素的属性值。1.6中attr返回属性的值为undefined,如果没有设置(set)。另外,.attr不应该在普通对象、数组(array)、窗口(window)或者文档中(document)。如果需要获取或者设置DOM属性,则应该使用.prop()方法。

使用.attr方法获取元素属性的值有两个主要优点:

方便(Convenience):这个方法可以在JQuery对象上直接调用和串联别的JQuery的方法。

跨浏览器的一致性(Cross-browser consistency):有报告说一些属性值在跨浏览器时的不一致性,甚至在同一浏览器的不同版本上也有不一致性。.attr减少这种不一致性

.val()

获取匹配集中第一个元素当前的值。

.val()就去主要用来获取表单中元素的值,例如input, select 或者textarea。

不同

<input data-name="user" id="name" value="aaaa" /> 
?$('#name').val() ;/* 'aaaa'*/ 
$('#name').attr('data-name'); /*user*/

下面通过一段代码给大家介绍jQuery attr("value") 和 val的区别

//2509行
if ( !getSetInput || !getSetAttribute ) {
jQuery.attrHooks.value = {
get: function( elem, name ) {
var ret = elem.getAttributeNode( name );
return jQuery.nodeName( elem, "input" ) ?
// Ignore the value *property* by using defaultValue
elem.defaultValue :
ret && ret.specified ? ret.value : undefined;
},
}

这边返回值的逻辑判断有变化

jQuery.nodeName( elem, "input" ) ?elem.defaultValue :ret && ret.specified ? ret.value :undefined;
// Ignore the value *property* by using defaultValue

要我们使用defaultValue.

JavaScript

attrHooks: {
type: {
set: function( elem, value ) {
if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
// Setting the type on a radio button after the value resets the value in IE6-9
// Reset value to default in case type is set after value during creation
var val = elem.value;
elem.setAttribute( "type", value );
if ( val ) {
elem.value = val;
}
return value;
}
}
}
},

而1.8.3代码如下

JavaScript

//2361行
attrHooks: {
type: {
set: function( elem, value ) {
// We can't allow the type property to be changed (since it causes problems in IE)
if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
jQuery.error( "type property can't be changed" );
} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
// Setting the type on a radio button after the value resets the value in IE6-9
// Reset value to it's default in case type is set after value
// This is for element creation
var val = elem.value;
elem.setAttribute( "type", value );
if ( val ) {
elem.value = val;
}
return value;
}
}
},
// Use the value property for back compat
// Use the nodeHook for button elements in IE6/7 (#1954)
value: {
get: function( elem, name ) {
if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
return nodeHook.get( elem, name );
}
return name in elem ?
elem.value :
null;
},
set: function( elem, value, name ) {
if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
return nodeHook.set( elem, value, name );
}
// Does not return so that setAttribute is also used
elem.value = value;
}
}
},

可见1.9删除了attrHooks.value方法导致非IE的attr("value")为undefined或默认值,而IE的attr("value")为""或默认值

Javascript 相关文章推荐
9个javascript语法高亮插件 推荐
Jul 18 Javascript
js定时调用方法成功后并停止调用示例
Apr 08 Javascript
javascript异步编程代码书写规范Promise学习笔记
Feb 11 Javascript
js实现星星打分效果的方法
Jul 05 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
Aug 10 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
Jul 07 Javascript
JavaScript实战之带收放动画效果的导航菜单
Aug 16 Javascript
webpack构建换肤功能的思路详解
Nov 27 Javascript
简述JS控制台的使用
Jul 15 Javascript
js实现网页随机验证码
Oct 19 Javascript
微信小程序实现点赞业务
Feb 10 Javascript
JS开发前端团队展示控制器来为成员引流
Aug 14 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
Jun 12 #Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
Jun 12 #Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
Jun 12 #Javascript
javascript jquery对form元素的常见操作详解
Jun 12 #Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
Jun 12 #Javascript
浅谈JS中逗号运算符的用法
Jun 12 #Javascript
Node.js Addons翻译(C/C++扩展)
Jun 12 #Javascript
You might like
php输出xml必须header的解决方法
2014/10/17 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
php生成word并下载代码实例
2019/03/15 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
在Javascript里访问SharePoint列表数据的实现方法
2011/05/22 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
2014/04/04 Javascript
理解JS事件循环
2016/01/07 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
jquery实时获取时间的简单实例
2017/01/26 Javascript
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
关于在mongoose中填充外键的方法详解
2017/08/14 Javascript
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
tensorflow 获取变量&amp;打印权值的实例讲解
2018/06/14 Python
Python全排列操作实例分析
2018/07/24 Python
python将秒数转化为时间格式的实例
2018/09/16 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
使用python实现mqtt的发布和订阅
2019/05/05 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
用Python实现职工信息管理系统
2020/12/30 Python
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
高一生物教学反思
2014/01/17 职场文书
小学科学教学反思
2014/01/26 职场文书
总账会计岗位职责
2014/03/13 职场文书
广告创意求职信
2014/03/17 职场文书
英文演讲稿开场白
2014/08/25 职场文书
单位接收函格式
2015/01/30 职场文书
2015双创工作总结
2015/07/24 职场文书
mysql查询结果实现多列拼接查询
2022/04/03 MySQL