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 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
Apr 18 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
Jun 25 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
Dec 21 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
Dec 29 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
Mar 09 Javascript
每天一篇javascript学习小结(Boolean对象)
Nov 12 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
Jan 26 Javascript
JS简单实现滑动加载数据的方法示例
Oct 18 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
Dec 20 Javascript
JavaScript中EventLoop介绍
Jan 22 Javascript
详解Webpack + ES6 最新环境搭建与配置
Jun 04 Javascript
Vue函数式组件的应用实例详解
Aug 30 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中使用正则表达式进行查找替换
2013/06/13 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
写的htc的数据表格
2007/01/20 Javascript
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
js格式化时间小结
2014/11/03 Javascript
自己封装的常用javascript函数分享
2015/01/07 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
京东优选小程序的实现代码示例
2020/02/25 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
pytorch进行上采样的种类实例
2020/02/18 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
三方股东合作协议书范本
2014/09/28 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
六一亲子活动感想
2015/08/07 职场文书
《假如》教学反思
2016/02/17 职场文书
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
SQL Server内存机制浅探
2022/04/06 SQL Server
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android