js便签笔记(4)——简单说说getAttributeNode()和setAttributeNode()
1.前言:
前两天写过一片《分析dom元素的特性Attribute和属性Property》,分析了特性和属性的区别。那篇文章却忽略了一个主要知识点——getAttributeNode()和setAttributeNode()
近来看《jQuery技术内幕》,今天正好看到jQuery.attr()那一部分,忽然想起来这个方法。就此简单说一说。
2.从jQuery说起:
jQuery指出,在IE6、7下,浏览器的getAttribute()和setAttribute()不能正常获取和设置Attribute的值。jQuery做的测试类似于:
div1.className = 'aaa';
alert(div1.getAttribute("className") === 'aaa');
IE6、7下或出现以上情况,即通过正常的 getAttribute("class")获取不到值。
那么在这种情况下,jQuery给出的解决方案是通过getAttributeNode("class").nodeValue获取,即可成功。相关代码如下:
1 if ( !getSetAttribute ) { 2 3 //省略... 4 5 // Use this for any attribute in IE6/7 6 // This fixes almost every IE6/7 issue 7 nodeHook = jQuery.valHooks.button = { 8 get: function( elem, name ) { 9 var ret; 10 ret = elem.getAttributeNode( name ); 11 return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? 12 ret.nodeValue : 13 undefined; 14 }, 15 set: function( elem, value, name ) { 16 // Set the existing or create a new attribute node 17 var ret = elem.getAttributeNode( name ); 18 if ( !ret ) { 19 ret = document.createAttribute( name ); 20 elem.setAttributeNode( ret ); 21 } 22 return ( ret.nodeValue = value + "" ); 23 } 24 }; 25 26 //省略... 27 }
3.如何应用:
3.1 getAttributeNode:
getAttributeNode()用法比较简单,它将返回一个Attr类型的对象,其nodeType === 2
<div id="div1" class="divClass"></div> var className = div1.getAttributeNode("class").nodeValue; //'divClass' var title = div1.getAttributeNode("title"); // null var type = div1.getAttributeNode("class").nodeType; // 2
3.2 setAttributeNode:
setAttributeNode()将接收一个Attr类型的对象,Attr类型的对象可用document直接创建:
<div id="div1" class="divClass"></div> var attr = document.createAttribute("myAttr"); attr.nodeValue = 'wang'; div1.setAttributeNode(attr);
运行以上代码,div1会加上一个“myAttr”的自定义特性:
4.最后:
加上对getAttributeNode()和setAttributeNode()的分析,对于html特性和dom属性的分析就更全面了。
各位看官,如有发现问题,请尽管提出!在此谢过!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)