你可以用纯 CSS 来做...
...如果您非常下定决心。
可用字符
HTML4 spec 说:
ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0- 9])、连字符(“-”)、下划线(“_”)、冒号(“:”)和句点(“.”)。
HTML5 扩大了可用字符池:
id 属性值在元素树的所有 ID 中必须是唯一的,并且必须包含至少一个字符。该值不得包含任何 ASCII 空格。
解决方案
我将继续假设您在 DOM 中仅使用字母、数字和 -_:. 作为 ID。如果您需要更紧凑的选择器,只需添加更多元素即可。
所以...这是符合上述条件的怪物选择器:
div[id^='0']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='1']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='2']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='3']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='4']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='5']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='6']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='7']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='8']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='9']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.'])
div {
display: flex;
align-items: center;
padding: 0.5rem;
margin: 0.5rem;
border: 3px solid transparent;
border-radius: 0.5rem;
font-family: sans-serif;
font-size: 12pt;
width: 20rem;
background-color: #ddf;
}
div[id^='0']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='1']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='2']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='3']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='4']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='5']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='6']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='7']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='8']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']),
div[id^='9']:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*=':']):not([id*='.']) {
border-color: black;
}
<div id="1">id: 1</div>
<div id="23">id: 23</div>
<div id="345">id: 345</div>
<div id="4567">id: 4567</div>
<div id="56789">id: 56789</div>
<div id="12345-6789">id: 12345-6789</div>
<div id="0123-some-text-here-4567">id: 0123-some-text-here-4567</div>
<div id="000-starts-with-digits">id: 000-starts-with-digits</div>
<div id="ends-with-digits-321">id: ends-with-digits-321</div>
<div id="only-text">id: only-text</div>
<div>(id is not provided)</div>
<div id>(id has no value)</div>
<div id="">(id is an empty string)</div>
说明
CSS 允许通过属性值来选择元素。 The syntax 包含一个 [attr*=value] 选择器,可用于检查子字符串。
通过链接该选择器,并用:not() 包围,可以过滤掉所有不需要的值。
请注意,每个组合选择器都以 [id^='digit'] 开头,从 0 到 9。没有它,它可以匹配具有空 id 的元素。通过指定字符串以数字开头,适当的元素会被过滤掉。
稍微简单的方法
您可以使用短十倍的选择器,但它会选择具有空 id 的元素,即 <div id></div> 和 <div id=""></div>。如果你不介意缺点,你可以使用这个:
div[id]:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*='.']):not([id*=':'])
div {
display: flex;
align-items: center;
padding: 0.5rem;
margin: 0.5rem;
border: 3px solid transparent;
border-radius: 0.5rem;
font-family: sans-serif;
font-size: 12pt;
width: 20rem;
background-color: #ddf;
}
div[id]:not([id*='A' i]):not([id*='B' i]):not([id*='C' i]):not([id*='D' i]):not([id*='E' i]):not([id*='F' i]):not([id*='G' i]):not([id*='H' i]):not([id*='I' i]):not([id*='J' i]):not([id*='K' i]):not([id*='L' i]):not([id*='M' i]):not([id*='N' i]):not([id*='O' i]):not([id*='P' i]):not([id*='Q' i]):not([id*='R' i]):not([id*='S' i]):not([id*='T' i]):not([id*='U' i]):not([id*='V' i]):not([id*='W' i]):not([id*='X' i]):not([id*='Y' i]):not([id*='Z' i]):not([id*='-']):not([id*='_']):not([id*='.']):not([id*=':']) {
border-color: black;
}
<div id="1">id: 1</div>
<div id="23">id: 23</div>
<div id="345">id: 345</div>
<div id="4567">id: 4567</div>
<div id="56789">id: 56789</div>
<div id="12345-6789">id: 12345-6789</div>
<div id="0123-some-text-here-4567">id: 0123-some-text-here-4567</div>
<div id="000-starts-with-digits">id: 000-starts-with-digits</div>
<div id="ends-with-digits-321">id: ends-with-digits-321</div>
<div id="only-text">id: only-text</div>
<div>(id is not provided)</div>
<div id>(id has no value)</div>
<div id="">(id is an empty string)</div>