gpt4 book ai didi

javascript - 是否可以像 getElementsByTagName 一样让 querySelectorAll 生效?

转载 作者:数据小太阳 更新时间:2023-10-29 03:50:36 25 4
gpt4 key购买 nike

getElementsByTagName() 有 2 个很棒的特性:速度快且实时。但是,如果我想获得 p strong 怎么办。当然,我可以再次使用 getElementsByTagName() 优化选择,但我不会失去新 p 标签的实时效果吗?

有没有办法将 querySelectorAll 变成实时选择器?

或者...有没有一种方法可以使用 getElementsByTagName()getElementsByClassName() 创建一个以类似方式工作的函数(至少对于后代)作为 querySelectorAll 但正在直播?

最佳答案

考虑使用突变观察器。使用 subtree: true 观察 childList。当通知到达时,您可以使用 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;
}

关于javascript - 是否可以像 getElementsByTagName 一样让 querySelectorAll 生效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30578673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com