我编写了一个JavaScript函数,它将返回一个“列表”,其中包含以某些值开头的Id:
function getElementsWithIdPrefix(prefix){
if (document.querySelectorAll){
return document.querySelectorAll('*[id^="' + prefix + '"]');
} else {
// none modern browsers support
var elements = document.getElementsByTagName('*');
var relevantElements = [];
for (var i = 0; i < elements.length; i++){
if (element.id && element.id.indexOf(prefix) !== -1){
relevantElements.push(element);
}
}
return relevantElements;
}
}
正如您所看到的,我的函数将返回不同的类型取决于document.querySelectorAll
的浏览器支持,我有两个问题:
答案 0 :(得分:2)
这不好吗?
可能,但这可能是一个意见问题。
如何通过我自己为每个元素创建Node对象并构造一个包含这些元素的新NodeList来返回?
您可以将QSA结果转换为如下所示的真实数组:
return Array.prototype.slice.call(document.querySelectorAll('*[id^="' + prefix + '"]'));
这样,你在两种情况下都会返回一个数组。
旁注:您必须非常难以找到没有QSA的浏览器。它适用于所有现代浏览器,也适用于IE8。
旁注2:这一行
if (element.id && element.id.indexOf(prefix) !== -1){
...不会查找前缀。它在ID中的任何位置查找子字符串匹配。对于前缀,请使用=== 0
(或element.id.substring(0, prefix.length) === prefix
)。