在jQuery中,当按属性值选择时,为什么我们需要将值括在引号'
'
中?
$("#demo-dropdown a").click(function() {
var href = $(this).attr("href");
console.log(typeof (href)); // there shows `string`
$("#tab-list li a[href= '" + href + "']" ).tab("show"); // why the single-quotes?
});
如果我使用:
$("#tab-list li a[href=" + href + "]" ).tab("show");
然后我会得到Syntax Error
:
Uncaught Error: Syntax error, unrecognized expression: #tab-list li a[href= #profile]
at Function.fa.error (jquery.min.js:2)
at fa.tokenize (jquery.min.js:2)
at fa.select (jquery.min.js:2)
at Function.fa [as find] (jquery.min.js:2)
at n.fn.init.find (jquery.min.js:2)
at new n.fn.init (jquery.min.js:2)
at n (jquery.min.js:2)
at HTMLAnchorElement.<anonymous> (index.html?_ijt=o70cto8b6ocd3tq2oh8bck1k4e:171)
at HTMLAnchorElement.dispatch (jquery.min.js:3)
at HTMLAnchorElement.r.handle (jquery.min.js:3)
答案 0 :(得分:0)
这就是jquery attribute-equals-selector看起来像[name=”value”]
的方式。请注意引号。在下面的表达式中,它选择具有匹配的href
$("#tab-list li a[href= '" + href + "']" ).tab("show");
^ ^
//attribute selector starts //attribute selector ends
答案 1 :(得分:0)
你是selecting based on attribute value。许多jQuery选择器语法都是从CSS选择器语法派生的,因此一些规则来自CSS。如果您要查找的值(包含在变量href
中)不是有效的CSS identifier,则需要将该搜索值括在引号中,就像使用单引号一样第一个代码示例。 当值包含空格时,您不能忽略引号。(您的错误消息暗示href
以空格开头。)为了更加健壮,还要转义值:
差:$("#tab-list li a[href=" + href + "]" )
好的:$("#tab-list li a[href='" + href + "']" )
更好:$("#tab-list li a[href='" + $.escapeSelector(href) + "']" )
如果您要搜索的值中包含引号,则需要转义。
答案 2 :(得分:0)
这是因为当你在某个地方使用字符串变量时,它也不会在字符串周围呈现"
或'
。
例如,当你这么做时
var someString = "Hello World";
console.log( someString );
即使变量包含字符串,您也会看到它不会在字符串周围生成引号。为什么?因为每次想要在某处使用字符串变量时必须删除""
是多么不方便。
实际上,你不会在字符串变量周围加上引号。
当你获取href
属性时,假设它看起来像href='www.example.com'
,只提取值,而不是它周围的引号。这一点很重要,你不希望这种情况发生:
var someString = "Hello World";
$("#someElm").text( someString );
// Produces a result
// where the html looks like this
// `<div id="someElm">"Hello World"</div>`
希望有所帮助!
答案 3 :(得分:-1)
你应该写下面的代码:
$("#tab-list").find('li').find("a[href='" + $href + "']");
你必须使用“href ='”+ $ href +“'”的原因因为href是标签a的属性,$ href是你想过滤的变量