重构 DOM 搜索方法
Restructuring DOM searching method?
作为Chrome扩展程序的一部分,我正在整个DOM中搜索每个ID/Class中包含特定单词的元素。
目前它看起来像:
"allSelectors": document.querySelectorAll("[id*='example'][class*='example']"),
"collapse": function () {
for (var i = 0; i < MyObject.allSelectors.length; i++) {
// Manipulate MyObject.allSelectors[i] etc
}
},
首先,我想以某种方式重组它(可能使用 array
?),以便像这样轻松添加新的选择器:
document.querySelectorAll("[id*='example'][class*='example'][id*='other'][class*='other']")
不容易扩展或好。
其次,我认为document.querySelectorAll
非常慢 - 我使用它的原因是因为我需要搜索 id/class 中的任何地方(因此使用 *=
),并且不能使用大型外部库(例如 jQuery),因为这是一个小文件并且正在注入用户端。
这些问题有没有解决方案? 因为如果有很多比赛,那么这种缓慢可能会成为一个问题。
首先,
我完全会选择querySelectorAll
,我认为它没有那么慢,而且它完全适合像你这样的情况。我同意你的观点,添加一个库是矫枉过正的,此外它可能不像有人想象的那么有益(让我们在这里测试一下)。
然后,我再次同意你的看法,即当前的解决方案不是很可扩展,阵列是要走的路。下面是使用数组的非常基本的实现:
// an array of classes and ids to match
var nodes,
searches = [
'[id*="test"]',
'[class*="example"]'
];
// a simple function to return an array of nodes
// that match the content of the array
function getNodes(arr){
return Array.prototype.slice.call(document.querySelectorAll( arr.join() ));
}
nodes = getNodes(searches);
好消息是可以轻松地在数组中添加或删除新的类和 id,例如,稍后您可以添加:
searches.push('[id*="some"]');
nodes = getNodes(searches); // new nodes will be fetched
这是一个带有完整示例代码的 jsbin。
相关文章:
- 重构 DOM 搜索方法
- 在JavaScript中搜索数组映射的最有效方法
- 在二维数组中搜索比嵌套循环更有效的方法
- 在HTML中搜索PHP的最佳方法
- 如果未找到搜索方法,则应返回什么
- 有没有一种优雅的方法可以在 JavaScript 中搜索关联数组
- 使用过多的 for() 循环在数组中搜索匹配项的替代方法
- 检测访问者是否来自谷歌搜索的最可靠方法
- 有什么方法可以隐藏搜索栏,直到用户向上滚动..类似于iPhone上的消息应用程序
- 搜索大型多嵌套 JSON 数据集的最有效方法
- 使用 javascript 实现属性-值搜索界面的最佳方法
- 谷歌放置搜索方法不一致的地方
- 了解搜索词数组是否也包含字符串的最快方法
- 搜索用户的好方法?我有个主意,但不确定
- 可搜索的加密方法(用于伪加密!)
- 使用jQuery搜索字符串以查找子字符串的最快方法
- string.search()抛出一个javascript错误'对象不'不支持属性或方法搜索'
- 您可以使用猫鼬中的实例方法搜索其他模型吗?
- 使用类似WHERE的方法搜索对象
- js Object #
没有方法'搜索'