$("'" + foo + "'") vs $(foo)

$("'" + foo + "'") vs $(foo)

本文关键字:quot foo vs      更新时间:2023-09-26

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

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

经过一天的故障排除,我发现如果我删除"'" ++ "'",并且它变得$(newClasses),该功能又开始工作了。 仅供参考:变量newClasses不包括字符串两端的'

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

笔记-

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

jQuery的API有没有可能改变?还有什么我没有想到的? 感谢您对可能的罪魁祸首的建议。

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

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

"#test"

但如果变量中已有数据,则不需要。 因此,如果您有一个名为 sel 的变量,该变量已经包含字符串 #test ,那么您可以执行以下操作:

$(sel)
只有在选择器字符串中添加引号时,如果需要将

引号嵌入到字符串的中间,例如以下选择器:

[data-myval='whatever']

我不知道你一开始就用过$("'" + newClasses + "'")。 为什么要在字符串前后添加'

这就像做$("'.fs.btn.heading.abstract'"). 我不明白你为什么会这样做。

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

您不可能设法使该代码正常工作,唯一可能的解释是,在添加该函数之前从未执行过该代码。

它基本上做的是:

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

请记住,当你看到"hello"时,字符串只保存hello,引号不是字符串的一部分