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 相关文章推荐
图片完美缩放
Sep 07 Javascript
jQuery 加上最后自己的验证
Nov 04 Javascript
javascript 兼容所有浏览器的DOM扩展功能
Aug 01 Javascript
js获取客户端外网ip的简单实例
Nov 21 Javascript
javascript类型转换示例
Apr 29 Javascript
TypeScript Type Innference(类型判断)
Mar 10 Javascript
Javascript实现代码折叠功能
Aug 25 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
Apr 25 jQuery
vue.js实例todoList项目
Jul 07 Javascript
利用node.js实现反向代理的方法详解
Jul 24 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
Nov 22 Javascript
微信小程序实现日历效果
Dec 28 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中json_decode()和json_encode()的使用方法
2012/06/04 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
多广告投放代码 推荐
2006/11/13 Javascript
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
Js 冒泡事件阻止实现代码
2013/01/27 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
JavaScript中的console.time()函数详细介绍
2014/12/29 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
javascript滚轮事件基础实例讲解(37)
2017/02/14 Javascript
VueJs组件prop验证简单介绍
2017/09/12 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python实现斐波那契数列的方法示例
2017/01/12 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
在PyCharm中实现关闭一个死循环程序的方法
2018/11/29 Python
python 自动重连wifi windows的方法
2018/12/18 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
面试求职的个人自我评价
2013/11/16 职场文书
计算机专业学生的自我评价
2013/12/15 职场文书
机电一体化应届生求职信范文
2014/01/24 职场文书
同学聚会老师邀请函
2014/01/28 职场文书
股份合作协议书范本
2014/04/14 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
SpringBoot整合minio快速入门教程(代码示例)
2022/04/03 Java/Android
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL