2011-04-18 48 views
3

我曾经以为单/双引号在Javascript中可以互换。因此,在一个jQuery的功能,任何人都可以解释为什么:Javascript/jQuery中的嵌套单/双引号

$('input:radio[name='+foo+'][value='+bar+']').attr('checked', true); 

作品,但

$('input:radio[name="+foo+"][value="+bar+"]').attr('checked', true); 

不? (如果foobar都是字符串。)

在双引号中的单/双引号中嵌套双引号不起作用吗?

+6

StackOverflow的语法荧光笔给出了一个很好的线索:) – 2011-04-18 15:36:14

回答

2

如果你使用一个报价类型里面另一个,在最现代的JavaScript引擎,它将把内,后复键入引号作为引号字符而不是字符串分隔符。

+0

“大多数[..]引擎”与它没有多大关系:这就是语言的定义! – 2011-04-18 15:31:14

+0

@Tomalak Geret'kal - 我同意,语言定义最终决定,但有一些JavaScript的旧实现不遵循语言规范。 – cdeszaq 2011-04-18 15:32:19

+0

@cdeszaq:即使在这个琐碎的方面呢?哇,他们真的很烂! – 2011-04-18 15:34:55

2

你不能在jQuery的嵌套变量,我知道你能做到这一点在php但不是jQuery的,只要用你的第一个选项:

$('input:radio[name='+foo+'][value='+bar+']').attr('checked', true); 

或做到这一点(我改变了你的第二个选项位):

$('input:radio[name="'+foo+'"][value="'+bar+'"]').attr('checked', true); 
2

它有效,但它们需要匹配。你的开盘报价是单一的,然后你试图用双倍的收盘价来平仓。这不起作用。

//\/SINGLE   \/DOUBLE 
$('input:radio[name="+foo+"][value="+bar+"]').attr('checked', true); 

这样做的效果是,JavaScript不知道你试图终止字符串文字并追加变量值。它假定你仍然在字符串文字中并且想要"字符作为它的一部分。只要报价匹配有这之间没有什么区别:

var foo = "hello " + world; 

var foo = 'hello ' + world; 
2

“可互换”并不意味着“任意”。

无论是用一组单引号还是双引号分隔字符串字面值,您都可以选择,但单字符串字面的开始和结束分隔符当然必须相同。

0
'input:radio[name="+foo+"][value="+bar+"]' 

不起作用,因为它是一个(单个)大字符串。您不注入foobar变量。

你必须把它写像这样:

'input:radio[name="' + foo + '"][value="' + bar + '"]' 

一个简单的例子:

'Value: " + foo + "'(BAD)

'Value: "' + foo + '"'(GOOD)

1

你不需要在foo附近加引号。

$('input:radio[name=food]') 

将在它自己的工作。