使用用户脚本删除“<b>”

时间:2018-02-02 21:47:24

标签: javascript regex

我经常使用某个网页,其中某些网页错误地包含单个<b/>,导致所有后续文字都是粗体。我正在尝试编写用户脚本以解决此问题,但以下JS代码不起作用:

document.body.innerHTML = document.body.innerHTML.replace(/<b\/>/g, '')

为什么?

2 个答案:

答案 0 :(得分:1)

一个很好的安全方法是:

// User inputs first word
System.out.print("Enter your first word: ");
String word1 = scan.next();

// User inputs second word
System.out.print("Enter your second word: ");
String word2 = scan.next();
if (word1.length() < word2.length()) {
    System.out.printf("%s is shorter than %s%n", word1, word2);
} else if (word1.length() > word2.length()) {
    System.out.printf("%s is longer than %s%n", word1, word2);
} else {
    System.out.printf("%s is the same length as %s%n", word1, word2);
}

&#13;
&#13;
document.querySelectorAll('b').forEach(b => {
  // const parent = b.parentNode;
  const fragment = document.createDocumentFragment();
  fragment.append(...b.childNodes);
  b.replaceWith(fragment);
  // (optional) to join consecutive textNodes
  // parent.normalize();
});
&#13;
setTimeout(() => {
  document.querySelectorAll('b').forEach(b => {
    const parent = b.parentNode;
    fragment = document.createDocumentFragment();
    fragment.append(...b.childNodes);
    b.replaceWith(fragment);
    parent.normalize();
  });
}, 1000);
&#13;
&#13;
&#13;

为了支持ES5(不知道为什么你现在需要这样做),这里有一个更加冗长的替代方案,也比上面更有效:

<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pellentesque posuere neque, ac consectetur turpis porta vel. Nullam consequat mauris quis lectus porttitor, id vehicula lorem maximus. Nunc laoreet velit nisl. Nunc sit amet nulla egestas, <b>tincidunt magna sed, hendrerit ante.</b> Vestibulum elementum porttitor nisi quis commodo. Morbi gravida odio a eros pretium, at sagittis velit iaculis. Ut quis eleifend tortor. Etiam consectetur congue tempor. Pellentesque vel gravida velit. Maecenas quis urna ante. Morbi vel tellus eros.
</p>
<p>
Nulla scelerisque vitae lacus quis consequat. Donec volutpat efficitur diam non lobortis. Donec porttitor in lorem vitae iaculis. Suspendisse eu ligula a arcu ultrices scelerisque vitae at lacus. Fusce sodales, nunc ac tincidunt dignissim, velit felis pellentesque odio, ac mattis orci eros molestie est. Aliquam euismod cursus sem, nec convallis libero aliquam vel. Aliquam ut velit ornare risus sollicitudin convallis. <b>Etiam massa sem, facilisis vel hendrerit vitae, <b>dignissim fermentum nulla.</b> Nullam pellentesque ipsum eu egestas convallis.</b> Maecenas scelerisque vitae nisl at tempor. Etiam eu egestas nibh. Phasellus vitae consectetur velit, sed fringilla metus. Nunc vitae pellentesque arcu. Nullam eget felis id ligula molestie placerat. Aliquam gravida pulvinar posuere. Nullam non purus consequat, volutpat enim eu, convallis ante.
</p>
<p>
<b>Quisque egestas</b> enim sed felis scelerisque ultrices. Proin id justo vitae ante volutpat tristique a nec metus. Vivamus quis scelerisque nunc, vitae dictum nunc. Vestibulum ultrices sem sit amet facilisis ornare. Sed tellus libero, vestibulum molestie ultricies a, cursus a nisi. Suspendisse potenti. Vestibulum sed ante tortor. Suspendisse eu sem quis velit aliquam tempus. Vivamus eget vulputate est, nec fermentum sem. Suspendisse potenti. In nunc ante, tincidunt ut nunc id, tempor aliquam mi. Vestibulum dictum, mi sed tempus commodo, ex turpis aliquam felis, suscipit aliquet leo eros tempor nisi. Donec et suscipit risus. Proin vestibulum felis interdum tellus luctus, nec tempus turpis cursus. Curabitur lectus nibh, scelerisque ut magna sed, aliquet mollis risus. Sed pulvinar, felis at sodales porta, enim neque rhoncus nulla, eget ornare odio lectus facilisis dolor.
</p>

答案 1 :(得分:0)

dom不能包含单个<b/>,之前必须有<b>

正确的正则表达式是:

document.body.innerHTML = document.body.innerHTML.replace(/<b\/?>/g, '')