未捕获错误:语法错误,无法识别的表达式:#Something

时间:2014-05-30 15:36:07

标签: javascript jquery

所以我在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

我怎样才能解决这个问题?

JSBin of the issue

1 个答案:

答案 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)数据元素。