[快速入门前端 61] JavaScript:DOM (3) 取得元素的属性值

取得元素属性值

在前篇文章中我们提到了如何抓取 HTML 的 element node,既然我们都可以抓到元素了,下一步就是取得更详细的资料,也就是该元素的属性值。
在开发中我们经常会使用 JavaScript 取得特定元素的属性,例如在判断单/多选框是否勾选时,需要取得该元素的 checked / selected 属性,除此之外也能透过 disabled 判断元素的状态。

常用属性

innerHTML、innerText

在前几篇文章中我们有大致了解过 innerHTMLinnerText,两者的差异主要在于前者会抓取 HTML code,而后者只抓文字内容,不过用法都相同,用 元素.innerHTML元素.innerText 就可取得字串。

<div id="block" name="title" class="red bold">     <a>this is title</a>    <div>another div</div></div>

http://img2.58codes.com/2024/20158509ZycMZPKacS.jpg

checked

在单/多选框中,checked 是判断勾选状态的重要属性,我们可以透过 input框.checked 取得 Boolean 值判断开选项是否打勾,也能够透过 元素:checked 直接取得该选框组中打勾的元素。

範例 (多选框):

<!-- HTML 结构 --><input class="check" id="check1" type="checkbox" value="11" name="checkbox"><input class="check" id="check2" type="checkbox" value="22" name="checkbox">

基于上方的程式结构,以下几种方法都可以判断勾选状态:

判断某选项是否打勾
// 方法一// 单独抓每个 input,例如 id、独有的 class 等// 适合只需判断某选项的情境document.querySelector('#check1').checked; // 判断 id="check1" 的选项是否被打勾// 方法二// 利用每组多选框 Name 都相等的特性,先抓到所有的 input 选项 List,再以索引值抓到特定选项// 适合需要判断每个或多个选项的勾选状态时使用// 步骤 1. 取得整组多选框 (下面两种方法皆可行)document.getElementsByName('checkbox'); // 会得到所有 input 的 nodeList 集合document.getElementsByClassName('check'); // 会得到所有 input 的 HTML collection// 步骤 2. 利用步骤1取得的阵列阵列资料取得每一个 inputdocument.getElementsByName('checkbox')[0]; // 第一个 input 框document.getElementsByName('checkbox')[1]; // 第二个 input 框// 步骤 3. 判断每一个 input 选框的 checked 属性值document.getElementsByName('checkbox')[0].checked; // 取得 Boolean 值document.getElementsByName('checkbox')[1]].checked;// 结论:// 方法一适合只需要判断「某选项」的情境// 方法二通常用于迴圈遍历每一个选项并判断
直接取得所有打勾的选项
// 这个方法是利用 query selector 的特性,将 checked 组合为一个複合选择器来直接选取「被打勾的所有项目」document.querySelectorAll('input[name="checkbox"]:checked');

单选 (radio) 与多选框同理,也可以使用同样的方法取得勾选状态,不过在利用 query selector 值获取打勾选项时基于 radio 一次只能选一个选项的特性,我们可以直接使用 querySelector,而不需要使用 querySelectorAll 来获取 List。

document.querySelector('input[name="checkbox"]:checked'); // 获取第一个符合条件的元素// 但因单选框只能单选,可以直接以此方法取得打勾的元素

disabled

disabled 属性是表单元素中非常常用的属性,可以用来控制元素禁用与否,当我们需要判断某元素的 disabled 状态时,也可以直接用 element.disabled 的方式来取得 Boolean 值。

<input type="button" id="btn1" value="按钮一"><input type="button" id="btn2" value="按钮二" disabled><script>    console.log(document.getElementById('btn1').disabled); // false (元素未禁用)    console.log(document.getElementById('btn2').disabled); // true (元素为禁用状态)</script>

src、value...

除了上述几个属性外,在 element node 中几乎所有的属性都可以透过 element.属性名 的方式取得,例如较常用到的 src、和 value,尤其在单/多选框的情境中,value 经常搭配 checked 属性用来取得被选中选项的值。

<!-- input 搭配 checked --><input id="radio1" type="radio" value="1" name="radio" checked> <!-- 预设选取 --><input id="radio2" type="radio" value="2" name="radio"><script>    // 取得 radio 中打勾选项的值    console.log(document.querySelector('input[name="radio"]:checked').value); // 1</script><!-- 用 .src 取得 img 元素的图片位置 --><img src="./img1.jpg"><script>    console.log(document.querySelector('img').src);</script>

className、classList

元素中大多数的属性都可以透过 element.属性名 取得,除了 class 则例外。因为 class 在 JavaScript 中属于保留关键字,所以我们要取得时必须使用 className 代替。
element.className 中回传的值为字串,若该元素有多个 class 时型态为 class名 class名 class名,较不方便使用,所以衍伸出 classList 的用法,可以直接取得由元素的 class 所构成的阵列。

<div id="block" name="title" class="red bold gray title"></div>
// 取得 class 字串document.querySelector('#block').className; // 'red bold gray title'// 取得 class 阵列document.querySelector('#block').classList; // ['red', 'bold', 'gray', 'title']

getAttribute()

除了 .属性名 外,还有一个取得值的终极用法,那就是 getAttribute()
getAttribute 基本上可以获得任何属性的值,用法为 getAttribute(属性名),括号中填入 HTML code 的属性名称即可,也就是说若要取得元素的类别,直接用 getAttribute('class') 就可以得到与 element.className 同样的结果,而不需要再注意是否为保留字。

<div id="block" name="title" class="red bold gray title"></div><img src="./img1.jpg"><input class="check" id="check1" type="checkbox" value="3" name="checkbox" checked><input class="check" id="check2" type="checkbox" value="1" name="checkbox">
// 取得 classdocument.querySelector('div').getAttribute('class'); // 'red bold gray title'// 取得 namedocument.querySelector('div').getAttribute('name'); // 'title'// 取得 iddocument.querySelector('div').getAttribute('id'); // 'block'// 取得 srcdocument.querySelector('img').getAttribute('src'); // './img1.jpg'// 取得 checkeddocument.querySelector('#check1').getAttribute('checked');

上一篇:[快速入门前端 60] JavaScript:DOM (2) 如何获取元素节点
下一篇:[快速入门前端 62] JavaScript:DOM (4) 修改元素的属性值
系列文章列表:[快速入门前端] 系列文章索引列表


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章