首页 前端知识 jquery radio设置checked但按钮radio仍然没选中的js处理方式

jquery radio设置checked但按钮radio仍然没选中的js处理方式

2024-04-29 11:04:05 前端知识 前端哥 352 852 我要收藏

nType = elem.nodeType;

// don’t get/set attributes on text, comment and attribute nodes

if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {

return;

}

if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) {

return jQuery( elem ) name ;

}

// Fallback to prop when attributes are not supported

if ( typeof elem.getAttribute === “undefined” ) {

return jQuery.prop( elem, name, value );

}

notxml = nType !== 1 || !jQuery.isXMLDoc( elem );

// All attributes are lowercase

// Grab necessary hook if one is defined

if ( notxml ) {

name = name.toLowerCase();

hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );

}

if ( value !== undefined ) {

if ( value === null ) {

jQuery.removeAttr( elem, name );

return;

} else if ( hooks && “set” in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {

return ret;

} else {

elem.setAttribute( name, value + “” );

return value;

}

} else if ( hooks && “get” in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {

return ret;

} else {

ret = elem.getAttribute( name );

// Non-existent attributes return null, we normalize to undefined

return ret === null ?

undefined :

ret;

}

}

1.9.0 attr():

attr: function( elem, name, value ) {

var ret, hooks, notxml,

nType = elem.nodeType;

// don’t get/set attributes on text, comment and attribute nodes

if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {

return;

}

// Fallback to prop when attributes are not supported

if ( typeof elem.getAttribute === “undefined” ) {

return jQuery.prop( elem, name, value );

}

notxml = nType !== 1 || !jQuery.isXMLDoc( elem );

// All attributes are lowercase

// Grab necessary hook if one is defined

if ( notxml ) {

name = name.toLowerCase();

hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );

}

if ( value !== undefined ) {

if ( value === null ) {

jQuery.removeAttr( elem, name );

} else if ( hooks && notxml && “set” in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {

return ret;

} else {

elem.setAttribute( name, value + “” );

return value;

}

} else if ( hooks && notxml && “get” in hooks && (ret = hooks.get( elem, name )) !== null ) {

return ret;

} else {

// In IE9+, Flash objects don’t have .getAttribute (#12945)

// Support: IE9+

if ( typeof elem.getAttribute !== “undefined” ) {

ret = elem.getAttribute( name );

}

// Non-existent attributes return null, we normalize to undefined

return ret == null ?

undefined :

ret;

}

}

1.8.3 和 1.9.0 的 prop() 是一样的:

prop: function( elem, name, value ) {

var ret, hooks, notxml,

nType = elem.nodeType;

// don’t get/set properties on text, comment and attribute nodes

if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {

return;

}

notxml = nType !== 1 || !jQuery.isXMLDoc( elem );

if ( notxml ) {

// Fix name and attach hooks

name = jQuery.propFix[ name ] || name;

hooks = jQuery.propHooks[ name ];

}

if ( value !== undefined ) {

if ( hooks && “set” in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {

return ret;

} else {

return ( elem[ name ] = value );

}

} else {

if ( hooks && “get” in hooks && (ret = hooks.get( elem, name )) !== null ) {

return ret;

} else {

return elem[ name ];

}

}

}

首先,我们看下 attr() 和 prop() 的区别:

attr() 里面,最关键的两行代码

elem.setAttribute( name, value + “” );

ret = elem.getAttribute( name );

很明显的看出来,使用的 DOM 的 API setAttribute() 和 getAttribute() 方法操作的属性元素节点。

prop() 里面,最关键的两行代码

return ( elem[ name ] = value );

return elem[ name ];

可以理解为 document.getElementById(el)[name] = value,这是转化成 element 的一个属性。

对比调试 1.9.0 和 1.8.3 的 attr() 方法,发现两者的区别在于

hooks.get( elem, name ))

返回的值不一样,具体的实现:

1.8.3 中

boolHook = {

get: function( elem, name ) {

// Align boolean attributes with corresponding properties

// Fall back to attribute presence where some booleans are not supported

var attrNode,

property = jQuery.prop( elem, name );

return property === true || typeof property !== “boolean” && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?

name.toLowerCase() :

undefined;

}

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后的最后

面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。
需要完整面试题的朋友可以点击蓝色字体免费获取

大厂面试题

面试题目录

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后的最后

面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。
需要完整面试题的朋友可以点击蓝色字体免费获取

[外链图片转存中…(img-60UK0Qr7-1712160713082)]

[外链图片转存中…(img-nU65pGi2-1712160713082)]

[外链图片转存中…(img-qHCbrZUM-1712160713083)]

[外链图片转存中…(img-vxG5ATez-1712160713083)]

转载请注明出处或者链接地址:https://www.qianduange.cn//article/6211.html
标签
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!