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 相关文章推荐
JavaScript 利用StringBuffer类提升+=拼接字符串效率
Nov 24 Javascript
Microsoft Ajax Minifier 压缩javascript的方法
Mar 05 Javascript
javascript开发随笔二 动态加载js和文件
Nov 25 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
Oct 24 Javascript
js改变文章字体大小的实例代码
Nov 27 Javascript
JavaScript中数组继承的简单示例
Jul 29 Javascript
浅析Javascript ES6中的原生Promise
Aug 25 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
Dec 19 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
Nov 22 Javascript
JavaScript事件冒泡与事件捕获实例分析
Aug 01 Javascript
微信公众号平台接口开发 菜单管理的实现
Aug 14 Javascript
vue项目中极验验证的使用代码示例
Dec 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
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
php表单处理操作
2017/11/16 PHP
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
jquery加载单文件vue组件的方法
2017/06/20 jQuery
jQuery表单设置值的方法
2017/06/30 jQuery
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
2018/09/20 Javascript
React Component存在的几种形式详解
2018/11/06 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
Python在不同目录下导入模块的实现方法
2017/10/27 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
小区门卫工作职责
2013/12/14 职场文书
学生思想表现的评语
2014/01/30 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
数据库之SQL技巧整理案例
2021/07/07 SQL Server