querySelectorAll selects 只选择第一个元素
querySelectorAll selects only selects the first element
我正在使用下面的代码,由 Niels Reijnders 在此线程 上编写,以将段落的每一行换行成 span。
function splitLines(container, opentag, closingtag) {
var spans = container.children,
top = 0,
tmp = '';
container.innerHTML = container.textContent.replace(/\S+/g, '<n>$&</n>');
for (let i = 0; i < spans.length; i++) {
var rect = spans[i].getBoundingClientRect().top;
if (top < rect) tmp += closingtag + opentag;
top = rect;
tmp += spans[i].textContent + ' ';
}
container.innerHTML = tmp += closingtag;
}
splitLines(document.querySelectorAll('p')[0], '<span>', '</span>')
效果很好,完成了我需要的,但只选择了 DOM 的第一段,没有选择其他段落。似乎添加 forEach 方法可能会解决我正在寻找的问题,但我不知道如何在此代码中实现它。
如有任何帮助,我们将不胜感激。
谢谢
你会想要这样的东西:
document.querySelectorAll('p').forEach(p => splitLines(p, '<span>','</span>'))
我正在使用下面的代码,由 Niels Reijnders 在此线程
function splitLines(container, opentag, closingtag) {
var spans = container.children,
top = 0,
tmp = '';
container.innerHTML = container.textContent.replace(/\S+/g, '<n>$&</n>');
for (let i = 0; i < spans.length; i++) {
var rect = spans[i].getBoundingClientRect().top;
if (top < rect) tmp += closingtag + opentag;
top = rect;
tmp += spans[i].textContent + ' ';
}
container.innerHTML = tmp += closingtag;
}
splitLines(document.querySelectorAll('p')[0], '<span>', '</span>')
效果很好,完成了我需要的,但只选择了 DOM 的第一段,没有选择其他段落。似乎添加 forEach 方法可能会解决我正在寻找的问题,但我不知道如何在此代码中实现它。
如有任何帮助,我们将不胜感激。
谢谢
你会想要这样的东西:
document.querySelectorAll('p').forEach(p => splitLines(p, '<span>','</span>'))