You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用querySelectorAll选择以-component结尾的Web Components标签?

无法通过属性选择器获取以"-component"结尾的自定义元素

问题原因

你写的[tag$="-component"]是属性选择器,它的作用是查找拥有tag属性且属性值以-component结尾的元素,而非匹配元素的标签名本身。你的自定义元素(比如<my-component>)并没有tag属性,所以这个选择器找不到任何目标元素。

可行解决方案

CSS选择器没有直接根据标签名后缀匹配的语法,需要先获取所有元素,再筛选出标签名符合要求的:

方案1:结合querySelectorAll('*')与过滤

const allElements = document.querySelectorAll('*');
// 转成数组后过滤标签名
const components = Array.from(allElements).filter(el => 
  el.tagName.toLowerCase().endsWith('-component')
);

const result = document.querySelector('.result');
result.innerHTML = 'Search started<br>';
components.forEach(el => {
  result.innerHTML += `${el.tagName}<br>`;
});

方案2:用getElementsByTagName('*')(性能略优)

getElementsByTagName('*')返回动态HTMLCollection,比querySelectorAll('*')的静态NodeList在遍历性能上稍好:

const allElements = document.getElementsByTagName('*');
const components = [];

for (let i = 0; i < allElements.length; i++) {
  const el = allElements[i];
  // 转小写后判断后缀
  if (el.tagName.toLowerCase().endsWith('-component')) {
    components.push(el);
  }
}

const result = document.querySelector('.result');
result.innerHTML = 'Search started<br>';
components.forEach(el => {
  result.innerHTML += `${el.tagName}<br>`;
});

关键说明

自定义元素的tagName属性返回大写形式的标签名(比如<my-component>的tagName是MY-COMPONENT),因此必须先转成小写,再用endsWith('-component')判断后缀是否符合要求。

内容的提问来源于stack exchange,提问作者Ood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:45:26