From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../api/document/getelementsbyclassname/index.html | 129 +++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 files/zh-cn/web/api/document/getelementsbyclassname/index.html (limited to 'files/zh-cn/web/api/document/getelementsbyclassname/index.html') diff --git a/files/zh-cn/web/api/document/getelementsbyclassname/index.html b/files/zh-cn/web/api/document/getelementsbyclassname/index.html new file mode 100644 index 0000000000..ea090774ad --- /dev/null +++ b/files/zh-cn/web/api/document/getelementsbyclassname/index.html @@ -0,0 +1,129 @@ +--- +title: Document.getElementsByClassName() +slug: Web/API/Document/getElementsByClassName +tags: + - API + - DOM + - HTML5 +translation_of: Web/API/Document/getElementsByClassName +--- +

{{APIRef("DOM")}}

+ +

返回一个包含了所有指定类名的子元素的类数组对象。当在document对象上调用时,会搜索整个DOM文档,包含根节点。你也可以在任意元素上调用{{domxref("Element.getElementsByClassName", "getElementsByClassName()")}} 方法,它将返回的是以当前元素为根节点,所有指定类名的子元素。

+ +

语法

+ +
var elements = document.getElementsByClassName(names); // or:
+var elements = rootElement.getElementsByClassName(names);
+ + + +

示例

+ +

获取所有 class 为 'test' 的元素:

+ +
document.getElementsByClassName('test');
+ +

获取所有 class 同时包括 'red' 和 'test' 的元素.

+ +
document.getElementsByClassName('red test');
+ +

在id 为'main'的元素的子节点中,获取所有class为'test'的元素

+ +
document.getElementById('main').getElementsByClassName('test');
+ +

我们还可以对任意的  {{ domxref("HTMLCollection") }} 使用 Array.prototype 的方法,调用时传递  HTMLCollection 作为方法的参数。这里我们将查找到所有class为 'test' 的 div 元素:

+ +
var testElements = document.getElementsByClassName('test');
+var testDivs = Array.prototype.filter.call(testElements, function(testElement){
+    return testElement.nodeName === 'DIV';
+});
+
+ +

获取第一个类名为 test 的元素

+ +

这是 getElementsByClassName() 的通常用法:

+ +
<html>
+<body>
+
+    <div id="parent-id">
+        <p>hello world 1</p>
+        <p class="test">hello world 2</p>
+        <p>hello world 3</p>
+        <p>hello world 4</p>
+    </div>
+
+    <script>
+        var parentDOM = document.getElementById("parent-id");
+
+        var test = parentDOM.getElementsByClassName("test"); // 匹配类名的元素集合,不是元素本身
+        console.log(test); //HTMLCollection[1]
+
+        var testTarget = parentDOM.getElementsByClassName("test")[0]; // 我们想要取到的第一个元素
+        console.log(testTarget); //<p class="test">hello world 2</p>
+    </script>
+</body>
+</html>
+ +

多个 Class 示例

+ +

document.getElementsByClassName 的工作方式与 document.querySelector 和 document.querySelectorAll 很相似。 只有所有 className 都匹配的元素会被选择。

+ +

HTML

+ +
<span class="orange fruit">Orange Fruit</span>
+<span class="orange juice">Orange Juice</span>
+<span class="apple juice">Apple Juice</span>
+<span class="foo bar">Something Random</span>
+<textarea id="resultArea" style="width:100%;height:7em"></textarea>
+ +

JavaScript

+ +
// getElementsByClassName selects partial matches
+var allOrangeJuiceByClass = document.getElementsByClassName('orange juice');
+var result = "document.getElementsByClassName('orange juice')";
+for (var i=0, len=allOrangeJuiceByClass.length|0; i<len; i=i+1|0) {
+    result += "\n  " + allOrangeJuiceByClass[i].textContent;
+}
+
+
+// querySelector only selects full complete matches
+var allOrangeJuiceQuery = document.querySelectorAll('.orange.juice');
+result += "\n\ndocument.querySelectorAll('.orange.juice')";
+for (var i=0, len=allOrangeJuiceQuery.length|0; i<len; i=i+1|0) {
+    result += "\n  " + allOrangeJuiceQuery[i].textContent;
+}
+
+document.getElementById("resultArea").value = result;
+ +

结果

+ +

{{EmbedLiveSample('Multiple_Classes_Example')}}

+ +

规范

+ + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('DOM WHATWG', '#dom-document-getelementsbyclassname', 'document.getElementsByClassName')}}{{Spec2('DOM WHATWG')}}
+ +

浏览器兼容性

+ +

{{Compat("api.Document.getElementsByClassName")}}

-- cgit v1.2.3-54-g00ecf