JavaScript中替换</blockquote>为<br/>失效问题求助
问题解决:jQuery text()获取内容后替换</blockquote>失效的原因及方案
核心原因
你用text()方法获取的是DOM元素渲染后的纯文本内容,而非原始的HTML源码字符串。页面中你写的<blockquote>和</blockquote>是HTML实体,浏览器解析后会将它们转换为真实的<blockquote>标签,而非保留为</blockquote>文本。因此text()拿到的内容里根本不存在</blockquote>这个字符串,替换自然不会生效。
而你直接测试的字符串是原始的包含</blockquote>的文本,所以替换能正常工作。
解决方法
把text()换成html()方法,获取原始的HTML内容(包含你需要的</blockquote>实体字符串),之后再进行替换操作:
修改后的JS代码:
$(document).on('ready', function() { $('.quoteMsg').click(function() { // 用html()替代text()获取原始HTML内容 var txt = $(this).closest('.replyBox').find('.replyMsg').html(); txt = txt.replace(/<\/blockquote>/gi, '<br/>'); txt = txt.replace(/(?:\r\n|\r|\n)/g, ' '); console.log(txt); $("textarea[name='quote']").val($.trim('[quote]' + txt + '[/quote]')); }); });
额外说明
如果最终需要在textarea中显示换行(而非<br/>实体),可以把替换目标换成\n,这样textarea里会显示自然换行:
txt = txt.replace(/<\/blockquote>/gi, '\n');
如果要后续在PHP中转成<br/>,也可以先替换成自定义标记,再在PHP中处理:
// JS中替换为自定义标记 txt = txt.replace(/<\/blockquote>/gi, '[NEWLINE]');
// PHP中转换为<br/> $txt = str_replace('[NEWLINE]', '<br/>', $_POST['quote']);
内容的提问来源于stack exchange,提问作者newbie.user88
相关产品推荐
相关产品推荐

