如何通过jQuery获取超链接ID并设置Redactor文本编辑器内容
如何通过jQuery获取超链接ID并设置Redactor文本编辑器内容
我来帮你搞定这个问题!看起来你已经能成功拿到超链接的ID,但在Redactor编辑器的内容设置上卡壳了,还遇到了“Redactor is not defined”的报错,咱们一步步来解决:
问题根源分析
- 你大概率用的是jQuery封装版的Redactor,不是原生JS版本——所以直接用
Redactor('#entry')这种原生写法会报错,因为jQuery版的Redactor没有全局暴露这个构造函数。 - 你之前尝试的
$('#redactor_content').redactor('set', ...)无效,主要是因为没正确获取到编辑器的实例,或者和你用的Redactor版本API不匹配。
修正后的完整代码
$(document).ready(function() { var buttons = ['formatting', '|', 'bold', 'italic', 'fullscreen', '|', 'button1']; // 初始化Redactor并保存实例(这是关键一步!) var redactorEditor = $('#redactor_content').redactor({ focus: true, buttons: buttons }).data('redactor'); // 通过jQuery的data方法拿到编辑器实例 $('a.aDirectReply').on("click", function(e) { // 一定要阻止a标签的默认跳转行为,不然刚设置完内容页面就跳走了 e.preventDefault(); var username = $(this).attr("id"); // 根据你的Redactor版本选对应的方法: // 如果你用的是Redactor 2.x版本,用set替换全部内容 redactorEditor.set('@' + username); // 如果你用的是Redactor 3+版本,用setContent替换全部内容 // redactorEditor.editor.setContent('@' + username); // 要是想把内容插入到光标当前位置(不是替换全部),就用insertContent // redactorEditor.editor.insertContent('@' + username); }); });
几个重要提醒
- 别忘阻止跳转:
e.preventDefault()一定要加,否则点击超链接后页面会跳转,你设置的编辑器内容根本来不及看。 - 实例获取要正确:jQuery版Redactor初始化后,必须通过
.data('redactor')获取实例,才能调用它的API方法。 - 版本对应API:Redactor不同版本的API差异很大,你得对照自己用的版本选方法:
- 2.x版本用
set()设置全部内容 - 3+版本用
editor.setContent()替换全部内容,editor.insertContent()插入到光标位置
- 2.x版本用
为啥之前的方法不管用?
你之前试的$('#redactor_content').redactor('set', ...)这种调用方式,在部分jQuery版Redactor版本里不支持,正确做法是先拿实例再调用方法;而“Redactor is not defined”的报错,就是因为你用的是jQuery封装的库,没有全局的Redactor构造函数可以直接用。
备注:内容来源于stack exchange,提问作者user460114
相关产品推荐
相关产品推荐

