getElementsByTagName()
具有2个重要功能:快速且实时。但是如果我想得到呢p strong
。当然,我可以getElementsByTagName()
再次使用来优化选择,但是我不会失去新p
标签的现场效果吗?
有没有办法querySelectorAll
变成实时选择器?
或者...是否有一种使用getElementsByTagName()
和getElementsByClassName()
创建功能的方法,并且该功能的运行方式类似于(至少在后代中)querySelectorAll
?
考虑使用变异观察者。留意childList
使用subtree: true
。通知到达时,您可以检查每个添加的节点,matches
以查看其是否与某些选择器匹配。
function querySelectorAllLive(element, selector) {
// Initialize results with current nodes.
var result = Array.prototype.slice.call(element.querySelectorAll(selector));
// Create observer instance.
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
[].forEach.call(mutation.addedNodes, function(node) {
if (node.nodeType === Node.ELEMENT_NODE && node.matches(selector)) {
result.push(node);
}
});
});
});
// Set up observer.
observer.observe(element, { childList: true, subtree: true });
return result;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句