jQuery属性选择器:为何属性值需用单引号包裹?
为什么jQuery属性选择器的属性值需要用单引号包裹?
这个问题的核心是jQuery选择器引擎的语法解析规则,咱们结合你的例子一步步说清楚:
1. 特殊字符引发的解析歧义
你代码里的href值是#profile,这里的#是CSS选择器里的ID标识符。如果不加单引号,拼接后的选择器会变成:
$("#tab-list li a[href= #profile]")
jQuery的选择器引擎会把#profile当成一个ID选择器来解析,而不是href属性的完整值——它会误以为你要找href等于“某个ID选择器”的元素,这完全不符合你的需求,自然就触发了语法错误。
2. 遵循CSS选择器标准
jQuery的选择器实现是基于CSS规范的,而CSS里明确规定:如果属性值不是合法的CSS标识符(比如包含#、.、空格、中括号,或者以数字开头),就必须用引号把属性值包裹起来,否则解析器无法正确识别属性值的边界。
3. 让代码更健壮
哪怕你的属性值现在没有特殊字符,养成用引号包裹的习惯也能避免后续的坑——比如哪天href的值变成了带空格的字符串(比如#user profile),不加引号的话直接就会报错。统一用引号包裹属性值,能适配所有属性值场景,让代码更稳定。
补充一下:其实用双引号包裹也可以,比如:
$("#tab-list li a[href=\"" + href + "\"]").tab("show");
只要和外层的引号区分开就行,不过用单引号不需要转义,写起来更顺手。
内容的提问来源于stack exchange,提问作者aircraft
相关产品推荐
相关产品推荐

