错误:语法错误,无法识别的表达式

时间:2016-12-14 17:29:55

标签: javascript jquery

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

  

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

我的代码如下:

$( "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的

然后做它的事。我认为问题在于逃避单引号吗?

2 个答案:

答案 0 :(得分:3)

使用

 $( "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>");

<强>样本

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

答案 1 :(得分:0)

以下是一些变体,如果您不喜欢使用\,最好的选择是使用变量:

// 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>