jQuery.attr('class')與jQuery.attr('className')的差異
Posted on 2010-08-25 22:18 黃偉榮 阅读(1502) 评论(5) 编辑 收藏 举报
今天同事們因為jQuery.attr('class')與jQuery.attr('className')這二個操作起了誰對誰錯問題,事實上這個的操作最後的結果都是一樣的,他的作用是,取得或更新Html Element的Class,如下的範例:
<div id="div1" class='A B C D'></div>
你一次想把div1的所有class換成E、F、G、H,用jQuery.addClass與jQuery.removeClass,太累了,一次處理不是很好嗎,所以可以下:
$('#div1').attr('class','E F G H'); //二者是一樣的結果 $('#div1').attr('className','E F G H');
你會好奇為什麼二個同樣的操作,要寫二種方式,這是有淵源的。
在HTML Dom中沒有一個叫class的屬性,反而叫className(我不知道為什麼)
圖1 來源W3C School
所以上面的範例改成DOM來寫
document.getElementById('div1').className='E F G H' //正常 document.getElementById('div1').class='E F G H' //失敗
為什麼換成jQuery又會過呢?
因為jQuery有作轉換。
在如jquery-1.4.1.js中的第967行開始,會設定在jQuery用的關鍵字,對應的實際關鍵字是什麼?
jQuery.props = { "for": "htmlFor", "class": "className", readonly: "readOnly", maxlength: "maxLength", cellspacing: "cellSpacing", rowspan: "rowSpan", colspan: "colSpan", tabindex: "tabIndex", usemap: "useMap", frameborder: "frameBorder" };
而jQuery在呼叫時attr時,name會尋找對應。
name = notxml && jQuery.props[ name ] || name;
所以輸入class,事實上會返回className。
二者
- 用class: 比較直覺跟HTML Tag相同,而且用class比className少幾個判斷,可能可以快幾奈秒吧。
- 用className: 與HTML Dom相同,不會因為沒了jQuery就不會寫Javascript。
不過硬要說二者誰對誰錯,好像沒有意義,因為二者都對,各有優缺,只要專案成員用一致的寫法,我想就可以了吧。
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2008-08-25 四種Timer的比較
2007-08-25 Visual Studio 2005 Add-ins and Tools and Utilities