我原以为单引号/双引号在Javascript中是可以互换的。所以在jQuery函数中,任何人都可以解释原因:
$('input:radio[name='+foo+'][value='+bar+']').attr('checked', true);
有效,但
$('input:radio[name="+foo+"][value="+bar+"]').attr('checked', true);
不? (如果foo
和bar
都是字符串。)
双引号中的单/双单嵌套不起作用吗?
答案 0 :(得分:2)
你不能在jQuery中嵌套变量,我知道你可以在php
而不是jQuery中这样做,只需使用你的第一个选项:
$('input:radio[name='+foo+'][value='+bar+']').attr('checked', true);
或者这样做(我改变了你的第二个选项):
$('input:radio[name="'+foo+'"][value="'+bar+'"]').attr('checked', true);
答案 1 :(得分:2)
它有效,但它们需要匹配。你的开场报价是单一的,然后你试图用双关闭它。这不起作用。
//\/SINGLE \/DOUBLE
$('input:radio[name="+foo+"][value="+bar+"]').attr('checked', true);
这样做的结果是javascript不知道您正在尝试终止字符串文字并附加变量值。它假定您仍然在字符串文字中,并希望"
字符作为其中的一部分。只要引号匹配,就没有区别:
var foo = "hello " + world;
和
var foo = 'hello ' + world;
答案 2 :(得分:2)
如果在另一个引用中使用一种引用类型,在大多数现代JavaScript引擎中,它会将内部,备用类型引号视为引号字符而不是字符串分隔符。
答案 3 :(得分:2)
“可互换”并不意味着“任意”。
您是否可以选择使用一组单引号或双引号来分隔字符串文字,但单个字符串文字的起点和终点分隔符当然必须相同。
答案 4 :(得分:1)
你不需要在foo周围加上引号。
$('input:radio[name=food]')
将自行完成。
答案 5 :(得分:0)
'input:radio[name="+foo+"][value="+bar+"]'
不起作用,因为它是一个(单个)大字符串。您没有注入foo
和bar
变量。
你必须这样写:
'input:radio[name="' + foo + '"][value="' + bar + '"]'
简化示例:
'Value: " + foo + "'
(BAD)
'Value: "' + foo + '"'
(好)