【问题标题】:replace plain-text with html using jQuery使用 jQuery 将纯文本替换为 html
【发布时间】:2025-11-24 11:25:02
【问题描述】:

我正在尝试在 jQuery 中编写一个 replacewith 函数,它将用 html 替换特定的单词。

基本上,我在加载文档时尝试用<span class='myclass'> 替换[this] 之类的内容。我环顾四周寻找了几个样本,但我看到的几件事我无法开始工作。我还在学习 jQuery,所以我希望有人能给我一些建议。

提前致谢,史蒂文。

HTML/文本:

[this]hello world![/this]​

JavaScript:

$(document).ready(function() {    
     // Using just replace
     $("body").text().replace(/[this]/g,'<b>')
});​

--编辑--

我使用下面的 Nir ​​演示对函数进行了一些更改。 这里有一些关于我在做什么的更多细节。我正在尝试制作一个内联分数,我已经拥有了适当的类和未制作的东西。它在html中运行良好,但是当我运行jQuery函数时它似乎不起作用。

很明显标签被替换了,但我的 css 似乎并没有像我提到的那样工作。

这是指向 HTML HERE的链接

这里有一个指向 jsfiddle 的链接HERE

$(document).ready(function() {    

// Using just replace
var text = $('body').text();
$("body").html(text.replace(/\[math\]/g,'<span class="container">').replace(/\[\/math\]/g,'</span>'));

var textt = $('body').text();
$("body").html(textt.replace(/\[top\]/g,'<div class="containme">').replace(/\[\/top\]/g,'</div>'));

var textl = $('body').text();
$("body").html(textl.replace(/\[line\]/g,'<div class="borderme">&nbsp;</div>'));

var textb = $('body').text();
$("body").html(textb.replace(/\[bot\]/g,'<div class="containme2">').replace(/\[\/bot\]/g,'</div>'));
 });​

这个 HTML

 <span class="readme">Whats up, here's a fraction.&nbsp;
<span class="container">
    <div class="containme">1</div>
    <div class="borderme">&nbsp;</div>
    <div class="containme2">2</div>
    </span>
 &nbsp;&nbsp;Hello? Whats up, here's a fraction.&nbsp;
    <span class="container">
    <div class="containme">1</div>
    <div class="borderme">&nbsp;</div>
    <div class="containme2">2</div>
  </span>
  &nbsp;&nbsp;Hello? Whats up, here's a fraction.&nbsp;
  </span>

到这个缩短的标记

<span class="readme"> Whats up, here's a fraction. [math][top]1[/top][line][bot]2[/bot][/math] </span>

【问题讨论】:

标签: jquery html text replace replacewith


【解决方案1】:

由于没有人解释用自定义 HTML 元素替换文本的方法,我现在使用下一个函数:

replaceWithAnchor: function (el, text) {
        let anch = $('<span>');
        anch.attr('id', `my-link-1`);
        anch.text(text);

        var content = el.html().replace(text, '<span id="need-to-replace"></span>');
        el.html(content);
        el.find('#need-to-replace').replaceWith(anch);
    }

【讨论】:

    【解决方案2】:

    这是demo that uses regex

    $(document).ready(function() {    
        // Using just replace
        var text = $('body').text();
        $("body").html(
            text.replace(/\[this\]/g,'<b>').replace(/\[\/this\]/g,'</b>')
        );
    });
    

    【讨论】:

    • 请不要只链接到解决方案,还要在答案中包含代码。如果链接由于某种原因变得不可用,您的“答案”将变得毫无用处。
    • 感谢您的演示。我添加了几行以尝试完成我正在尝试做的功能,似乎我打破了它:|。你介意看看这个小提琴吗? jsfiddle.net/stevenschemers/juTtG/24
    • 我更新了我的 OP,提供了更多关于我想要实际完成的工作的信息。感谢您的帮助
    【解决方案3】:

    javascript replace() 返回一个新字符串,它不会改变原始字符串,所以应该是:

    $(document).ready(function() {    
        var content = $("body").text().replace(/\[this\]/g,'<b>')
        $("body").html(content);
    });​
    

    注意括号必须被转义,否则它将用&lt;b&gt;替换括号内的每个字符。

    这是FIDDLE

    【讨论】:

    • A (slightly-updated) JS Fiddle 以避免链接小提琴中的第二个 replace()
    • 这是一个很棒的演示,非常感谢。我将对我的 OP 进行一些编辑。在我看到你的答案之前,我试图从 Nic 那里得到答案,它确实取代了我所需要的,但似乎我的 css 无法正常工作。你能看看这个演示给我一些建议吗? jsfiddle.net/stevenschemers/juTtG/28
    最近更新 更多