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 相关文章推荐
jquery HotKeys轻松搞定键盘事件代码
Aug 30 Javascript
jquery中获得$.ajax()事件返回的值并添加事件的方法
Apr 15 Javascript
jquery动画1.加载指示器
Aug 24 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
Apr 07 Javascript
JavaScript实现函数返回多个值的方法
Jun 09 Javascript
jQuery实现自定义checkbox和radio样式
Jul 13 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
Sep 26 Javascript
JavaScript用JSONP跨域请求数据实例详解
Jan 06 Javascript
jquery与ajax获取特殊字符实例详解
Jan 08 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
Apr 19 Javascript
微信小程序实现tab左右切换效果
Nov 15 Javascript
VUE 动态组件的应用案例分析
Dec 02 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
mysql5写入和读出乱码解决
2006/11/25 PHP
php header()函数使用说明
2008/07/10 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
学习ExtJS accordion布局
2009/10/08 Javascript
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
2012/02/16 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
python访问纯真IP数据库的代码
2011/05/19 Python
np.dot()函数的用法详解
2020/01/17 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
python实现人工蜂群算法
2020/09/18 Python
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
高三自我鉴定
2013/10/23 职场文书
人事部专员岗位职责
2014/03/04 职场文书
学生自我评语大全
2014/04/18 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书