javascript - 重构DOM搜索方法?

标签 javascript arrays google-chrome-extension

作为 Chrome 扩展的一部分,我在整个 DOM 中搜索每个 ID/类中包含特定单词的元素。

目前看起来像这样:

"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),因为这是一个小文件并且正在被用户端注入(inject)。

是否有解决这些问题的方法?因为如果有很多比赛,那么这种缓慢可能会成为一个问题。

最佳答案

首先,我会完全选择 querySelectorAll,我认为它没有那么慢,而且它完全适合像您这样的情况。我同意你的看法,为此添加一个库有点矫枉过正,而且它可能不像某些人认为的那样有益(让我们 test it here )。

然后,我再次同意您的观点,即当前解决方案的可扩展性不是很好,阵列才是可行之道。这是一个使用数组的非常基本的实现:

// 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带有完整的示例代码。

关于javascript - 重构DOM搜索方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29039036/

相关文章:

javascript - 与 webpack 捆绑时 ReactRouter 未定义

c - 排序数组C程序

arrays - 创建一个按 block 连接 block 的矩阵,如楼梯 MATLAB

javascript - 使用 Chrome 扩展程序内容脚本嵌入附加内容

javascript - JavaScript 中的全局变量可在函数内更改

javascript - 将 AWIS 调用更改为异步函数

javascript - Ext Js 2.1 组合框 Anymatch 过滤器不起作用

PHP - 试图获取非对象的属性

javascript - 如何制作一个在单击图标时打开 url 的扩展程序?

google-chrome-extension - 如何将 chrome 扩展的高度设置为浏览器窗口高度?