基于元素id属性的通配符解决方案
是的,这是可能的。这直接回答了您的问题,而不依赖于第三方 JavaScript 或 API 或元素 id 以外的属性。你也不必使用 class=
自定义方法调用示例
// Uses JavaScript regex features to search on id= attribute
var arrMatches = document.getElementsByRegex('^statusMessage_.*');
这会得到一个数组,其中包含所有 id 以“statusMessage_”开头的元素(甚至是嵌套元素)。
实施示例 - 可重用和通用
这是getElementsByRegex 函数的一个实现,它在DOM 中搜索给定的正则表达式,从document 开始。为方便起见并根据预期行为,它被附加到文档对象。
<head>
<script>
// Called as: document.getElementsByRegex("pattern").
// Returns an array of all elements matching a given regular expression on id.
// 'pattern' argument is a regular expression string.
//
document['getElementsByRegex'] = function(pattern){
var arrElements = []; // to accumulate matching elements
var re = new RegExp(pattern); // the regex to match with
function findRecursively(aNode) { // recursive function to traverse DOM
if (!aNode)
return;
if (aNode.id !== undefined && aNode.id.search(re) != -1)
arrElements.push(aNode); // FOUND ONE!
for (var idx in aNode.childNodes) // search children...
findRecursively(aNode.childNodes[idx]);
};
findRecursively(document); // initiate recursive matching
return arrElements; // return matching elements
};
</script>
</head>
可能有更有效的实现,但这个提供了一个开始。函数体可以根据喜好换成其他算法。
测试代码
最后,使用具有像这样的嵌套元素的 HTML 简介对其进行测试
<body>
<div id="statusMessage_1">1</div>
<div id="statusMessage_2">2
<div id="content">other stuff</div>
<div id="statusMessage_3">3</div>
</div>
<script>
// a quick test to see if you get the expected result.
var arrMatches = document.getElementsByRegex('^statusMessage_.*');
alert('found ' + arrMatches.length + ' matches - expected 3.')
</script>
这个 HTML 块包含三个以id="statusMessage_ 开头的元素;因此警报测试会说
“找到 3 个匹配项 - 预期 3 个”
变体的附录信息
如果您想将搜索限制为仅 div 元素或某种其他类型的特定元素,那么您需要将以下 getElementByTagName 代码注入算法以限制搜索的元素集。
var arrDivs = document.getElementsByTagName("div"); // pull all divs from the doc
您可能希望通过在第二个参数中传递标签名称来修改通用算法,以便在搜索开始之前进行过滤
var arrMatches = document.getElementsByRegex('^statusMessage_.*', 'div');