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.validate的使用说明介绍
Nov 12 Javascript
js构造函数、索引数组和属性的实现方式和使用
Nov 16 Javascript
jQuery实现平滑滚动到指定锚点的方法
Mar 20 Javascript
Bootstrap 布局组件(全)
Jul 18 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
Aug 10 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
Aug 24 Javascript
javascript获取指定区间范围随机数的方法
Sep 08 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
Aug 03 jQuery
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
Jan 20 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
May 19 Javascript
js实现贪吃蛇游戏 canvas绘制地图
Sep 09 Javascript
vue 使用localstorage实现面包屑的操作
Nov 16 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控制网页过期时间的代码
2008/09/28 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
2016/01/04 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
JavaScript this调用规则说明
2010/03/08 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
jquery控制显示服务器生成的图片流
2015/08/04 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
详解jQuery中关于Ajax的几个常用的函数
2017/07/17 jQuery
JavaScript中的高级函数
2018/01/04 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
关于layui导航栏不展示下拉列表的解决方法
2019/09/25 Javascript
Python中的并发编程实例
2014/07/07 Python
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
通过Pandas读取大文件的实例
2018/06/07 Python
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
感恩父母的演讲稿
2014/05/06 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
《我是什么》教学反思
2016/02/16 职场文书
python中如何对多变量连续赋值
2021/06/03 Python
python 详解turtle画爱心代码
2022/02/15 Python
方法汇总:Python 安装第三方库常用
2022/04/26 Python