使用JavaScript操作DOM節(jié)點(diǎn)屬性的通用方法
一、核心概念:DOM 屬性的兩類形式
在操作前先分清兩個易混概念,避免踩坑:
- HTML 原生屬性:標(biāo)簽上寫的屬性(如
id="box"、src="img.jpg"、class="content"); - DOM 對象屬性:JS 獲取 DOM 節(jié)點(diǎn)后,節(jié)點(diǎn)對象自帶的屬性(如
node.id、node.src、node.className);大部分場景下兩者可以互通,但部分屬性有專屬寫法(比如class對應(yīng)className)。
二、通用操作:getAttribute/setAttribute/removeAttribute
這是操作所有 HTML 屬性的通用方法,無論原生屬性還是自定義屬性都適用,兼容性最好。
| 方法 | 作用 | 語法示例 |
|---|---|---|
getAttribute(屬性名) | 獲取屬性值 | box.getAttribute('id') |
setAttribute(屬性名, 值) | 設(shè)置 / 新增屬性 | box.setAttribute('title', '提示文字') |
removeAttribute(屬性名) | 刪除屬性 | box.removeAttribute('class') |
代碼示例:通用方法操作屬性
<div id="box" class="container" data-index="1">測試div</div>
<script>
const box = document.getElementById('box');
// 1. 獲取屬性
console.log(box.getAttribute('id')); // 輸出:box
console.log(box.getAttribute('class')); // 輸出:container
console.log(box.getAttribute('data-index')); // 輸出:1(自定義屬性)
// 2. 設(shè)置/新增屬性
box.setAttribute('title', '這是一個div'); // 新增title屬性
box.setAttribute('class', 'new-container'); // 修改class屬性
box.setAttribute('data-type', 'test'); // 新增自定義data屬性
// 3. 刪除屬性
box.removeAttribute('data-index'); // 刪除data-index屬性
// 查看修改后的HTML:<div id="box" class="new-container" data-type="test" title="這是一個div">測試div</div>
console.log(box.outerHTML);
</script>
三、快捷操作:DOM 對象直接訪問屬性
對于常用的原生屬性(如 id、src、href、type 等),可以直接通過DOM節(jié)點(diǎn).屬性名操作,比通用方法更簡潔。
?? 注意:部分屬性名和 HTML 標(biāo)簽里的寫法不同(核心差異):
- HTML 里的
class→ JS 里的className(因?yàn)?class 是 JS 關(guān)鍵字); - HTML 里的
for(label 標(biāo)簽) → JS 里的htmlFor; - HTML 里的
readonly→ JS 里的readOnly(駝峰命名)。
代碼示例:快捷操作屬性
<img id="img" src="old.jpg" alt="舊圖片">
<input type="text" id="input" class="form-input" readonly>
<label for="input" id="label">輸入框:</label>
<script>
const img = document.getElementById('img');
const input = document.getElementById('input');
const label = document.getElementById('label');
// 1. 獲取屬性
console.log(img.src); // 輸出:完整的圖片URL(如http://xxx/old.jpg)
console.log(input.className); // 輸出:form-input(對應(yīng)class屬性)
console.log(label.htmlFor); // 輸出:input(對應(yīng)for屬性)
console.log(input.readOnly); // 輸出:true(布爾值,不是字符串)
// 2. 設(shè)置屬性
img.src = 'new.jpg'; // 修改圖片地址
img.alt = '新圖片'; // 修改alt屬性
input.className = 'new-form-input'; // 修改class
input.readOnly = false; // 取消只讀
// 3. 清空屬性(部分屬性可直接賦值為空)
img.alt = '';
</script>
四、特殊屬性處理
1. class 屬性:推薦用 classList(操作樣式類更靈活)
直接修改className會覆蓋全部類,而classList支持「添加、移除、切換、判斷」單個類,是操作樣式類的最佳方式。
<div id="demo" class="box">測試樣式</div>
<script>
const demo = document.getElementById('demo');
// 1. 添加類(不會覆蓋原有類)
demo.classList.add('active', 'red'); // 可同時加多個類
// 2. 移除類
demo.classList.remove('box');
// 3. 切換類(有則刪,無則加,適合點(diǎn)擊切換場景)
demo.classList.toggle('active');
// 4. 判斷是否包含某個類
console.log(demo.classList.contains('red')); // 輸出:true
</script>
2. data-* 自定義屬性:推薦用 dataset
HTML5 新增的data-*自定義屬性(如data-id、data-name),可以通過dataset快捷訪問,無需寫getAttribute。
<div id="user" data-id="1001" data-user-name="張三">用戶信息</div>
<script>
const user = document.getElementById('user');
// 1. 獲取data屬性(自動轉(zhuǎn)駝峰:data-user-name → userName)
console.log(user.dataset.id); // 輸出:1001
console.log(user.dataset.userName); // 輸出:張三
// 2. 設(shè)置data屬性
user.dataset.age = '20'; // 新增data-age="20"
user.dataset.userName = '李四'; // 修改data-user-name="李四"
// 3. 刪除data屬性(賦值為null或delete)
delete user.dataset.age;
</script>
3. 布爾屬性:如 checked、disabled、selected
這類屬性的特點(diǎn)是「只要存在就生效」,JS 中對應(yīng)的值是布爾類型(true/false),而非字符串。
<input type="checkbox" id="checkbox" checked>
<button id="btn" disabled>禁用按鈕</button>
<script>
const checkbox = document.getElementById('checkbox');
const btn = document.getElementById('btn');
// 獲取布爾屬性
console.log(checkbox.checked); // 輸出:true
console.log(btn.disabled); // 輸出:true
// 修改布爾屬性
checkbox.checked = false; // 取消勾選
btn.disabled = false; // 啟用按鈕
</script>
五、常用場景示例
示例 1:點(diǎn)擊按鈕切換圖片
<img id="banner" src="banner1.jpg" alt="輪播圖1">
<button id="changeBtn">切換圖片</button>
<script>
const banner = document.getElementById('banner');
const changeBtn = document.getElementById('changeBtn');
let isFirst = true;
changeBtn.addEventListener('click', function() {
if (isFirst) {
banner.src = 'banner2.jpg';
banner.alt = '輪播圖2';
} else {
banner.src = 'banner1.jpg';
banner.alt = '輪播圖1';
}
isFirst = !isFirst;
});
</script>
示例 2:獲取表單輸入框的屬性并修改
<input type="text" id="username" placeholder="請輸入用戶名" maxlength="10">
<button id="checkBtn">查看屬性</button>
<script>
const username = document.getElementById('username');
const checkBtn = document.getElementById('checkBtn');
checkBtn.addEventListener('click', function() {
// 獲取輸入框?qū)傩?
console.log('占位符:', username.placeholder);
console.log('最大長度:', username.maxLength);
console.log('當(dāng)前值:', username.value);
// 修改屬性
username.placeholder = '請輸入真實(shí)姓名';
username.maxLength = 15;
});
</script>
總結(jié)
- 通用場景:用
getAttribute/setAttribute/removeAttribute操作所有屬性(包括自定義屬性); - 常用原生屬性:直接用
DOM節(jié)點(diǎn).屬性名(如img.src、input.className)更簡潔; - 特殊屬性:
- class 用
classList(add/remove/toggle); - data-* 自定義屬性用
dataset; - 布爾屬性(checked/disabled)賦值布爾值(true/false)。
- class 用
以上就是使用JavaScript操作DOM節(jié)點(diǎn)屬性的通用方法的詳細(xì)內(nèi)容,更多關(guān)于JavaScript操作DOM節(jié)點(diǎn)屬性的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
js jquery ajax的幾種用法總結(jié)(及優(yōu)缺點(diǎn)介紹)
本篇文章只要介紹了js jquery ajax的幾種用法總結(jié)(及優(yōu)缺點(diǎn)介紹),需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01
微信小程序?qū)崿F(xiàn)上拉加載功能示例【加載更多數(shù)據(jù)/觸底加載/點(diǎn)擊加載更多數(shù)據(jù)】
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)上拉加載功能,結(jié)合實(shí)例形式分析了微信小程序加載更多數(shù)據(jù)、觸底加載或點(diǎn)擊加載更多數(shù)據(jù)的相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2020-05-05
js中根據(jù)字?jǐn)?shù)截取字符串,不能截?cái)鄒rl
給一個文字,對輸出的文字進(jìn)行截取,保留400個字符,其中對url的保留比較麻煩,尤其是有兩個相同url時不能采用indexOf獲取其字符位置2012-01-01
JS實(shí)現(xiàn)鼠標(biāo)移上去顯示圖片或微信二維碼
本文給大家分享一段使用的js代碼實(shí)現(xiàn)鼠標(biāo)移入顯示圖片或微信二維碼樣式,代碼簡單易懂,非常不錯,需要的朋友參考下吧2016-12-12
微信小程序?qū)崿F(xiàn)導(dǎo)航欄和內(nèi)容上下聯(lián)動功能代碼
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)導(dǎo)航欄和內(nèi)容上下聯(lián)動功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
JavaScript中Null與Undefined的區(qū)別解析
這篇文章主要介紹了JavaScript中Null與Undefined的區(qū)別解析,本文給出了多個代碼實(shí)例講解它們之間的區(qū)別,需要的朋友可以參考下2015-06-06
javascript實(shí)現(xiàn)省市區(qū)三級聯(lián)動下拉框菜單
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)省市區(qū)三級聯(lián)動下拉框菜單很詳細(xì)的代碼,解決了大家實(shí)現(xiàn)javascript省市區(qū)三級聯(lián)動下拉框菜單的問題,感興趣的小伙伴們可以參考一下2015-11-11
JS將時間的標(biāo)準(zhǔn)格式和時間戳格式和2022-01-27?00:00:00(年月日時分秒)格式相互轉(zhuǎn)換(最新推薦)
這篇文章主要介紹了JS如何將時間的標(biāo)準(zhǔn)格式和時間戳格式和2022-01-27?00:00:00(年月日時分秒)格式相互轉(zhuǎn)換,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05
JavaScript實(shí)現(xiàn)的內(nèi)存數(shù)據(jù)庫LokiJS介紹和入門實(shí)例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的內(nèi)存數(shù)據(jù)庫LokiJS介紹和入門實(shí)例,LokiJS是一個內(nèi)存數(shù)據(jù)庫,將性能考慮放在第一位,使用JavaScript編寫,需要的朋友可以參考下2014-11-11

