对于传统的HTML,HTML5是一场叛乱。之前的所有版本都对JavaScript接口进行了三言两语的描述,主要空间用于定义标签,所有与JavaScript相关的内容都留给DOM规范来定义。HTML5规范围绕如何使用新标签定义了大量JavaScriptAPI。其中一些API与DOM重叠,定义了浏览器应支持的DOM扩展。Class相关的扩展HTML4在web开发领域被广泛采用后,导致了一个很大的变化,那就是class属性的使用越来越多。一方面可以用来给元素添加样式,另一方面也可以用来表达元素的语义。因此,自然会有大量的JavaScript代码来操作CSS类,例如动态修改类或在文档中搜索具有给定类或给定类集的元素等等。为了让开发者适应并增加对class属性的新理解,HTML5增加了很多专门用于简化CSS类使用的API。getElementsByClassName()方法HTML5新增的getElementsByClassName()方法是最流行的方法,可以通过文档对象和所有HTML元素调用。该方法最早出现在JavaScript库中,通过已有的DOM函数实现,而原生实现具有很大的性能优势。getElementsByClassName()方法接受一个参数,一个包含一个或多个类名的字符串,并返回一个包含指定类的所有元素的NodeList。当传入多个类名时,类名的顺序并不重要。看看下面的例子。//获取类中所有包含“username”和“current”的元素,类名顺序无所谓varallCurrentUsernames=document.getElementsByClassName("usernamecurrent");//获取ID为"的元素myDiv”,其中包含名为“selected”的所有元素varselected=document.getElementById("myDiv").getElementsByClassName("selected");调用此方法时,只会返回调用元素的子树中的元素。在文档对象上调用getElementsByClassName()将始终返回与类名匹配的所有元素,在元素上调用该方法将仅返回后代元素中的匹配元素。使用此方法可以更轻松地为具有特定类的元素添加事件处理程序,因此您不再局限于使用ID或标记名称。但不要忘记,由于返回的对象是NodeList,因此使用此方法与使用getElementsByTagName()和其他返回NodeList的DOM方法具有相同的性能问题。支持getElementsByClassName()方法的浏览器有IE9+、Firefox3+、Safari3.1+、Chrome和Opera9.5+。classList属性在操作类名时需要通过className属性来增删改换类名。因为className是一个字符串,即使只修改了字符串的一部分,每次也必须设置整个字符串的值。例如,以下面的HTML代码为例。
