JavaScript element.matches()
最后修改于 2025 年 4 月 2 日
在本文中,我们将探讨 JavaScript 中的 element.matches()
方法。此方法检查一个元素是否与特定的 CSS 选择器匹配,这对于 DOM 遍历和事件委托非常有用。
基本定义
element.matches()
方法返回一个布尔值,指示该元素是否会根据指定的 CSS 选择器字符串被选中。它是 Element API 的一部分,并在所有现代浏览器中得到支持。
此方法对于事件委托特别有用,您需要检查事件目标是否满足某些条件。它可以接受任何有效的 CSS 选择器作为参数,包括复杂的选择器。
基本的 element.matches()
此示例演示了 matches() 检查元素类型的基本用法。
<!DOCTYPE html> <html> <head> <title>Basic matches()</title> </head> <body> <div id="content">Hello there!</div> <p class="message">This is a message.</p> <script> const div = document.getElementById('content'); const p = document.querySelector('.message'); console.log(div.matches('div')); // true console.log(div.matches('#content')); // true console.log(p.matches('div.message')); // false </script> </body> </html>
在此基本示例中,我们检查元素是否与不同的选择器匹配。div 元素同时匹配 'div' 和 '#content' 选择器,而段落元素不匹配不存在的 'div.message' 选择器。
这演示了 matches()
验证元素-选择器关系的根本用法。只有当元素能被给定的 CSS 选择器选中时,该方法才返回 true。
使用 matches() 进行事件委托
此示例展示了如何使用 matches() 进行高效的事件委托。
<!DOCTYPE html> <html> <head> <title>Event Delegation</title> </head> <body> <ul id="menu"> <li class="item">Home</li> <li class="item active">Products</li> <li class="item">About</li> </ul> <script> document.getElementById('menu').addEventListener('click', function(e) { if (e.target.matches('li.item')) { console.log('Menu item clicked:', e.target.textContent); } if (e.target.matches('li.active')) { console.log('Active item clicked!'); } }); </script> </body> </html>
在这里,我们在菜单列表上使用事件委托。点击处理程序使用 matches()
检查目标是否与特定的选择器匹配。这种方法比单独将处理程序附加到每个项目更有效。
该示例展示了 matches()
如何实现基于元素特性的选择性事件处理。它可以与单个和多个类选择器一起使用。
检查复杂选择器
此示例演示了 matches() 与复杂的 CSS 选择器组合。
<!DOCTYPE html> <html> <head> <title>Complex Selectors</title> </head> <body> <div class="container"> <p class="highlight">Important text</p> <p>Normal text</p> <a href="#" class="btn highlight">Button</a> </div> <script> const elements = document.querySelectorAll('.container *'); elements.forEach(el => { if (el.matches('p.highlight')) { console.log('Highlighted paragraph:', el.textContent); } if (el.matches('a.btn')) { console.log('Button element found'); } if (el.matches(':not(.highlight)')) { console.log('Element without highlight:', el.tagName); } }); </script> </body> </html>
此示例展示了 matches()
如何处理复杂的选择器。我们检查具有多个类、特定组合和否定伪类的元素。
该方法处理所有 CSS 选择器类型,包括属性选择器、伪类和组合子。这使其在精确的元素选择检查方面非常强大。
动态类检查
此示例演示了使用 matches() 检查动态添加的类。
<!DOCTYPE html> <html> <head> <title>Dynamic Classes</title> <style> .active { color: red; } .hidden { display: none; } </style> </head> <body> <div id="box" class="box">Sample Content</div> <button onclick="toggleClass()">Toggle Active</button> <button onclick="checkStatus()">Check Status</button> <script> const box = document.getElementById('box'); function toggleClass() { box.classList.toggle('active'); } function checkStatus() { const isActive = box.matches('.active'); console.log('Is box active?', isActive); } </script> </body> </html>
在这里,我们切换元素上的一个类,并使用 matches()
检查其当前状态。该方法提供了一种干净的方法来验证类的存在,而无需直接访问 classList。
当您需要检查复杂的选择器条件,而不仅仅是类的存在时,这种方法很有用。它可以与任何有效的 CSS 选择器一起使用,而不仅仅是类选择器。
使用 matches() 进行表单验证
此示例展示了如何使用 matches() 进行表单验证模式。
<!DOCTYPE html> <html> <head> <title>Form Validation</title> </head> <body> <form id="userForm"> <input type="text" id="username" pattern="[A-Za-z]{3,}" title="3+ letters" required> <button type="submit">Submit</button> </form> <p id="message"></p> <script> document.getElementById('userForm').addEventListener('submit', function(e) { e.preventDefault(); const input = document.getElementById('username'); const message = document.getElementById('message'); if (input.matches(':invalid')) { message.textContent = 'Please enter a valid username (3+ letters)'; message.style.color = 'red'; } else { message.textContent = 'Form submitted successfully!'; message.style.color = 'green'; } }); </script> </body> </html>
在此表单验证示例中,我们使用 matches()
和 ':invalid' 伪类来检查输入的有效性。这种方法与 HTML5 验证属性(如 'pattern' 和 'required')集成。
该示例演示了 matches()
如何与反映元素状态的伪类一起工作。这为检查验证状态提供了一种声明式的方法。
来源
在本文中,我们展示了如何在 JavaScript 中使用 element.matches()
。此方法对于现代 Web 开发中的 DOM 遍历、事件委托和选择器匹配至关重要。
作者
列出 所有 JS DOM 教程。