所以我在 React 组件中有以下代码
handleClick: function(e) {
e.preventDefault();
var post = new AisisWriter.Models.Post()
var title = this.stripHtml($('#post-title').val());
var content = this.stripHtml($('#post-content').val());
post.set({title: title, content: content});
post.save().then(this.created, this.failed);
},
stripHtml: function(content){
if($(content)[0] !== undefined){
return $(content)[0].textContent;
}
return content;
},
最重要的一点是,我试图删除您尝试发回的任何 HTML,但保留其他符号,例如 #
等 Markdown。
无论如何,#post-content
包含以下内容:# Something
并且显然 Jquery 不喜欢它:未捕获错误:语法错误,无法识别表达式:#Something
我该如何解决这个问题?
最佳答案
让我先从解决方案开始:
function stripHtml(){
content = strip($('#content').val());
alert(content);
}
function strip(content){
var content2 = jQuery.parseHTML(content);
if(content2[0].data !== undefined){
// This will remove all the html assuming there is any
return content2[0].data;
}
// Return the content if their is no html
return content;
}
解释一下,从 jQuery >= 1.9 documentation 开始:
jQuery(htmlString) versus jQuery(selectorString)
在 1.9 之前,如果字符串符合以下条件,则该字符串将被视为 HTML 字符串: 字符串中的任何位置都有 HTML 标记。这有潜力 导致代码无意执行并拒绝有效的选择器字符串。 从 1.9 开始,只有以 a 开头的字符串才被视为 HTML 小于(“<”)字符。 Migrate插件可用于恢复 1.9 之前的行为。
如果已知字符串是 HTML 但可能以任意文本开头 不是 HTML 标签,将其传递给 jQuery.parseHTML() ,它将返回一个 表示标记的 DOM 节点数组。 jQuery 集合可以是 由此创建,例如:$($.parseHTML(htmlString))。这个会 处理 HTML 模板时被认为是最佳实践 例子。文字字符串的简单用法,例如 $("
Testing
").appendTo("body") 不受此更改的影响。底线:传递给 jQuery() 并以某些内容开头的 HTML 字符串 小于号以外的字符将被解释为选择器。 由于字符串通常不能被解释为选择器,因此最 可能的结果将是抛出“无效的选择器语法”错误 嘶嘶声选择器引擎。使用 jQuery.parseHTML() 解析任意 HTML。
block 引用>因此您需要使用 jQuery.parseHTML首先运行函数并访问包含所需文本的对象 (0) data 元素。
关于javascript - 未捕获错误 : Syntax error, 无法识别的表达式:# Something,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23958286/