测试用 div : id="testBox"
通常,如果一个HTML元素带有id标识符,该标识符就是JS操控它的凭据,比如上方的div元素,JS可以这样操作它:
console.log(testBox); /* <div id="testBox">测试用 div : id="testBox"</div> */
console.log(元素id名) 将在浏览器的控制台打印出该标签HTML结构的完整内容,就像上述代码中的注释部分内容那样。这表明,通过元素的 id 标识名称可以直接操作该元素,比如给它换个文本颜色:
testBox.style.color = 'red';
上面的代码,testBox 就是本文开头那个 div 的 id,直接指代那个 div。div元素的前景色即文本颜色是通过 CSS 设置的,所以 testBox.style 是指 div 对象的 style 属性,style属性下又有很多子属性,前景色就是CSS中的 color 属性,所以JS将之表达为 testBox.style.color。这种用 . 来连缀表达对象的属性的方法在编程语言中很常见,初学者可以把它当成“的”字来理解:testBox 的 style 属性的 color 属性。
虽然使用元素的id标识符可以直接操作该元素,不过更多的人还是使用JS内置的方法 getElementById() 方法获取元素:
var mybox = document.getElementById('testBox');
mybox.style.color = 'navy';
getElementById() 方法前面要有 document,因为这个方法基于document对象。这是一个可以顾名思义的方法,通过(By)Id 获取(get)元素(Element)。还可以通过 get 标签的 ClassName、TagName、Name 等拿到元素,这类,Element 要用复数,分别写成:getElementsByClassName()、getElementsByTagName()、getElementsByName();与 getElementById() 方法不同,这些方法拿到的元素是对象集合,要通过数组下标去操作具体的元素个体。比如以本文为例,我们使用了好几个 pre 标签,现在我们来改变第二个 pre,给它加上红色边框:
let pres = document.getElementsByTagName('pre');
pres[1].style.border = '1px solid red';
上面的代码,通过 document.getElementsByTagName() 方法,我们拿到了所有的 pre 标签,并记入数组变量 pres 中,然后,我们通过数组下标 1 拿到文档中的第二个 pre 标签 pres[1],通过它设置其边框为我们预设的样子。
JS还有两个万能的获取元素的方法,querySelector 和 querySelectorAll,这是ES6引入的方法,前者获得指定标识的第一个元素,后者获得指定标识的所有元素集合。指定标识可以是 id(写成 #id名称)、可以是class类名(写成 .class名称)、可以是标签名(例如div写成 div),还可以设定范围,例如 id="textBox" 元素下的第一代 p 标签,写成 #textBox > p,试看:
var mydiv = document.querySelector('#testBox'); /* 拿到 id="testBox" 的第一个元素(理论上也是唯一的元素) */
var redBox = document.querySelector('.txtRed'); /* 拿到 class="txtRed" 的第一个元素 */
var firstP = document.querySelector('p'); /* 拿到文档的第一个 p 标签 */
var ps = document.querySelectorAll('p'); /* 拿到文档中全部的 p 标签 */
var mypres = document.querySelectorAll('#ma > pre'); /* 拿到 id="ma" 元素下的所有的第一代 pre 标签 */
var myspans = document.querySelectorAll('#pa span'); /* 拿到 id="pa" 元素下的所有任意辈分的 span 标签 */
下面给出一个实例:将本文 class="ma" 下的所有元素内的所有 button 标签的背景色变为浅绿色:
var buttonAr = document.querySelectorAll('.ma button'); /* 取得 class="ma" 元素下的全部 button标签 */
buttonAr.forEach(button => button.style.backgroundColor = 'lightgreen'); /* 设置每一个pre的背景色 */
上面第一行代码,获取所有 class="ma" 的元素下的全部 button 标签,赋值给数组变量 buttonAr,第二行用一个数组遍历方法将按钮的背景颜色(backgroundColor 或 background)变为浅绿色(lightgreen)。到目前止,本文只有一个 class="ma" 的元素,如果稍后还有且它们旗下也有 button 按钮标签,则一样会受到上面代码的影响。
拿到想要的HTML元素,还有其他方法,以后如果需要再介绍。