所以我在React Component中有以下代码
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不喜欢它:Uncaught Error: Syntax error, unrecognized expression: # Something
我怎样才能解决这个问题?
答案 0 :(得分:1)
首先让我从解决方案开始:
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)与jQuery(selectorString)
在1.9之前,如果字符串被认为是HTML字符串 在字符串中的任何地方都有HTML标记。这有可能 导致无意中执行代码并拒绝有效的选择器字符串。 从1.9开始,如果字符串以a开头,则只被视为HTML 小于("<")字符。 Migrate插件可用于恢复 1.9之前的行为。
如果已知字符串是HTML,但可以以任意文本开头 不是HTML标记,将其传递给jQuery.parseHTML(),它将返回一个 表示标记的DOM节点数组。一个jQuery集合可以 由此创建,例如:$($。parseHTML(htmlString))。这个会 在处理HTML模板时被视为最佳实践 例。简单使用文字字符串,如 $("
测试
")。appendTo(" body")不受此更改的影响。
底线:传递给jQuery()的HTML字符串以某些东西开头 除了小于字符之外,将被解释为选择器。 由于字符串通常不能被解释为选择器,因此最多 可能的结果将是"无效的选择器语法"错误引发的错误 嘶嘶声选择引擎。使用jQuery.parseHTML()来解析任意 HTML。
由于您需要首先使用jQuery.parseHTML函数并访问包含所需文本的对象(0)数据元素。