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 API来处理不同的浏览器事件
Dec 09 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
Feb 18 Javascript
jQuery ajax提交Form表单实例(附demo源码)
Apr 06 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
Jul 04 Javascript
javascript回到顶部特效
Jul 30 Javascript
angular2+node.js express打包部署的实战
Jul 27 Javascript
react-native封装插件swiper的使用方法
Mar 20 Javascript
微信小程序上传图片实例
May 28 Javascript
Vue 实现展开折叠效果的示例代码
Aug 27 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
Apr 04 jQuery
JavaScript类的继承多种实现方法
May 30 Javascript
VUE使用axios调用后台API接口的方法
Aug 03 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代码简化
2010/02/08 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
js arguments.callee的应用代码
2009/05/07 Javascript
11款基于Javascript的文件管理器
2009/10/25 Javascript
JS解析XML的实现代码
2009/11/12 Javascript
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
IE下JS保存图片的简单实例
2016/07/15 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
详解vue-router和vue-cli以及组件之间的传值
2017/07/04 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
JavaScript复制变量三种方法实例详解
2020/01/09 Javascript
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
幼师专业求职推荐信
2013/11/08 职场文书
小学语文国培感言
2014/03/04 职场文书
教师节横幅标语
2014/10/08 职场文书
财务整改报告范文
2014/11/05 职场文书
Elasticsearch 基本查询和组合查询
2022/04/19 Python