返回不同类型的JavaScript函数(Array vs NodeList)
JavaScript function that return with different types (Array vs NodeList)
我编写了一个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
的支持,我对此有两个问题:
- 这不好吗?我的意思是-在JavaScript类型系统中,它是否被认为是代码气味或不良实践?
- 我如何为每个元素创建节点对象,并构造一个包含这些元素的新NodeList来返回?
这不好吗?
可能,但这可能是个人意见的问题。
我如何自己为每个元素创建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
)
相关文章:
- setInteval vs setTimeout
- $(this).prop('property') vs. this.property
- 如何为json对象中的段发送array[]
- [].slice vs Array.prototype.slice
- Array.length vs Array.prototype.length
- [].map.call() VS Array.prototype.map.call()?
- [].slice.call(this) vs array.prototype.call(this)
- Angular-Service Array.filter vs basic for loop
- array.forEach.call vs array.map.call
- array.concat vs angular.copy
- jQuery UI自动完成JSON数组vs. JS-Array
- array.push(element) vs array[array.]长度]=元素
- 返回不同类型的JavaScript函数(Array vs NodeList)
- Array() vs new Array()
- 数组中.vs的;[];何时使用Array.over "[];
- Javascript _map () vs array.map();为什么一个在这里起作用而另一个不起作用
- JavaScript Array shims vs for ... in
- [].slice.call vs Array.prototype.slice.call
- Array.size() vs Array.length
- Array.filter vs $filter('filter')