jQuery属性选择器 - 为什么引号?

时间:2018-01-27 03:05:58

标签: javascript jquery attributes

在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)

4 个答案:

答案 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是你想过滤的变量