$(“'”+ foo +“'”)vs $(foo)

时间:2012-08-10 22:41:08

标签: javascript jquery html

我有一些代码自开始以来一直在工作,超过两个月。选择器具有动态内容,存储在变量newClasses中。我的代码曾经是$("'" + newClasses + "'"),大约两天前,我在页面上添加了单独的功能,没有影响这段代码,也没有导入任何库或其他任何东西,我得到了错误

Uncaught Error: Syntax error, unrecognized expression: '.fs.btn.heading.abstract' code.jquery.com/jquery.min.js:2

在一天的问题排查后,我发现如果我删除了"'" ++ "'",并且它变为$(newClasses),则该功能再次开始工作。仅供参考:变量newClasses在字符串的两端都不包含'

现在,我知道这是一个不同的问题,但是可以在单独的部分中添加哪些代码来实现功能,并导致我必须删除单引号的串联?

备注 -

  • 我不是在寻找网页的代码帮助,更多的故障排除方法和思考答案。
  • 由于代码量和添加的代码不同,发布代码毫无意义,但您可以随意查看Git代码here
  • 我甚至尝试恢复到先前的提交,由于某种原因,它仍然有相同的错误。
  • 我从编程会话中推断出,当控制台在低级别行号(在本例中为2)引用JS或JQuery时,它通常与一个简单的;,{{1 },或),但JSLint没有显示出那种特殊的异常现象。
  • 此后没有浏览器更改,但我确实重新启动,可能还有系统更新等待完成。

jQuery的API有可能发生变化吗?我没想到的其他东西?您对可能的罪魁祸首的建议表示赞赏。

3 个答案:

答案 0 :(得分:3)

选择器只是一个字符串。如果你的变量已经是一个字符串类型,那么你不需要为每一端添加引号,这样做可能会导致错误,因为字符串的每一端都不应该有引号。所以,$(var)应该可以正常工作。

引号用于声明字符串文字,如:

"#test"

但如果您已在变量中包含数据则不需要。因此,如果您有一个名为sel的变量已经包含字符串#test,那么您可以这样做:

$(sel)

你可以在引号中添加引号的唯一一次是你需要嵌入到字符串中间的引号,例如这个选择器:

[data-myval='whatever']

答案 1 :(得分:2)

我不知道你曾经使用过$("'" + newClasses + "'")。为什么要在字符串之前和之后添加'

这就像在做$("'.fs.btn.heading.abstract'")。我无法理解为什么你会这样做。

jQuery选择器中唯一需要引用的时间是当您使用属性选择器时:$('input[id="test.input"]')

答案 2 :(得分:0)

你无法设法让代码工作,唯一可能的解释是代码在添加该函数之前从未执行过。

它基本上做的是:

var id= "#idname"; //#idname
var str = "'" + id + "'"; //'#idname'
$(str); //equivalent to $("'#idname'"); which is wrong

请记住,当您看到"hello"时,字符串仅保留hello,引号不是字符串的一部分