【问题标题】:Error: Syntax error, unrecognized expression错误:语法错误,无法识别的表达式
【发布时间】:2016-12-14 17:29:55
【问题描述】:

我试图触发我的 onclick 事件,直到我在控制台日志中得到以下信息:

错误:语法错误,无法识别的表达式:li[data-path='00's']

我的代码如下:

$( "li[data-path='00\'s']" ).on("click", function() 
{
    console.log("in 00s");
    $('#replacewithimg').replaceWith('<img id="replacewithimg" src="../assets/img/playlist-icons/00s.png" style="padding-left: 5px;padding-right: 10px;padding-bottom: 5px;">');
    $('#replacewithtext').replaceWith('<b id="replacewithtext" style="font-size:30px;">00\'s Playlist</b>');
    $('#replacewithtext2').replaceWith('<p id="replacewithtext2" style="font-size:18px; padding-top:10px;">Includes Amy Whinehouse, Westlife, The Killers...</p>');
});

如果您单击与 li 标记匹配的元素,该标记包含带有的数据路径

00 年代

然后做它的事。我认为问题在于转义单引号?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    使用

     $( "li[data-path='00\\'s']" )
    

    而不是

    $( "li[data-path='00\'s']" )
    

    第一个反斜杠将转义函数调用中的第二个反斜杠,将其发送给函数,现在剩余的反斜杠将由 CSS 用于 CSS 选择器

    PS : 使用它来避免转义 '

    $('#replacewithtext').replaceWith("<b id='replacewithtext' style='font-size:30px;'>00\'s Playlist</b>");
    

    演示

    $( "li[data-path='00\\'s']" ).on("click", function() 
    {
        console.log("in 00s");
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <li data-path="00's"
        >Click</li>

    【讨论】:

    • 谢谢!可悲的是,它修复了控制台错误,但是当我单击该元素时。不进入函数?
    • @irishwill200 我加了一个demo给你看确实是进入函数了。现在问题一定出在其他地方。找到错误并随时再次询问是否卡住:)
    • @irishwill200 是在页面呈现后由代码生成的li/.on 代码已被调用(例如通过 ajax 调用)?
    【解决方案2】:

    这里有一些变化,如果你不喜欢使用\,最好的办法是使用变量:

    // with outer ', inner ", single \
    console.log($('div[data-path="00\'s"]').length)
    // with outer ", inner ', double \\
    console.log($("div[data-path='00\\'s']").length)
    
    // No \, using a variable, with outer ' and inner "
    // This doesn't work inline as the js parser sees the '
    // rather than it being a jquery limitation
    var path = "00's"
    console.log($('div[data-path="' + path + '"]').length)
    
    // without inner " or '
    
    // With outer " use double \\
    console.log($("div[data-path=00\\'s]").length)
    // With outer ' use triple \\\
    console.log($('div[data-path=00\\\'s]').length)
    
    // doesn't work
    // console.log($("div[data-path=00's]").length)
    // console.log($("div[data-path=00\'s]").length)
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div data-path="00's">
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 2015-09-20
      • 2013-02-26
      • 1970-01-01
      相关资源
      最近更新 更多