Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么jquery不起作用?_Javascript_Jquery - Fatal编程技术网

Javascript 为什么jquery不起作用?

Javascript 为什么jquery不起作用?,javascript,jquery,Javascript,Jquery,在我的程序中,我有一个jquery行 $( '#monsters[0]').animate( { left: "+=25" },500); 我有一个名为monsters的数组,但我不明白为什么会有不同,当我将id更改为不同的图像id时,此代码确实有效,我将('img')放在id为monsters的图像上[0]我也确定这是图像id。但是我运行了上述代码,图像没有任何变化,控制台中也没有出现错误,有人能解释一下吗 ,如果这有帮助的话。“#monsters[0]”不能被jQuery解析为表示元素具有

在我的程序中,我有一个jquery行

$( '#monsters[0]').animate( { left: "+=25" },500);
我有一个名为monsters的数组,但我不明白为什么会有不同,当我将id更改为不同的图像id时,此代码确实有效,我将
('img')
放在id为monsters的图像上[0]我也确定这是图像id。但是我运行了上述代码,图像没有任何变化,控制台中也没有出现错误,有人能解释一下吗

,如果这有帮助的话。

“#monsters[0]”
不能被jQuery解析为表示元素具有id
“monsters[0]”
。它被解析为具有as id
monsters
和属性
0
的元素的查询

你可以

$(document.getElementById('monsters[0]')).animate( { left: "+=25" },500);
如果您多次使用它,您可以为自己构建一个小型实用程序:

function $$(id) { return $(document.getElementById(id)) }
所以你只需要

$$('monsters[0]').animate( { left: "+=25" },500);
但您可能应该避免使用这些id,例如,它们会在CSS中给您带来相同的问题。在这里,类或数据属性看起来更有意义


评论:


当然还有另一种动态转义
[
]
字符(以及以后可能出现的其他字符)的解决方案。不要这样做:这使得代码更加复杂,隐藏了它只对特定形式的id有效的事实,而且更重:您构建了一个字符串,jQuery将解析该字符串以了解您需要该id,然后jQuery将调用
document.getElementById
。直接使用
document.getElementById
更清晰、更可靠、更高效。

字符
[
]
在选择器中具有特殊意义(它们指示)。如果要将它们用作ID选择器(或任何其他类型的选择器)的一部分,则必须使用
\
对其进行转义

请注意,由于要将选择器表示为字符串文字,因此也必须转义转义序列

'#monsters\\[0\\]'
$(“#怪物”)。制作动画({左:+=25},500)


$(“#怪物”)
给出了一个jQuery包装的对象。

@tryingtogetprogramming我详细解释了我的解释。现在清楚了吗?@正在尝试,因为jQuery使用了角括号,就像在CSS中定义的那样。作为条件,例如,
a[href^='https://']
(其href以
https://
开头的所有链接)。首先,您确实不应该有ID为
monsters[0]
的元素。例如,使用怪物。@Tomalak-你似乎混淆了方括号和角括号。“条件”在这里不是一个很好的术语,选择器中的所有内容都是条件,它们是属性选择器。为什么他一开始就不应该有这样的身份证呢?我没有把方括号和尖括号搞混。我本可以说“谓词”,但那只是“条件”的另一个词。为什么你不应该有这样的身份证?因为它会干扰您使用的系统。例如,这使得编写CSS和jQuery变得更加困难。由于在不适当的地方使用了编程符号,它使代码变得杂乱无章,并使代码更难理解。一个ID应该是一个字符串,出于实用性和敏感性的考虑,它不应该看起来像一段代码。@dystroy第三个变体应该是
$(“*[ID='monsters[0]']”)
,它也可以不转义地工作。无论如何,OP已经证实了我的怀疑,ID包含尖括号,因为他在某个点上评估了它们。这验证了我的观点——这是错误的,而且OP一开始不应该使用这样的东西。可能是非常有用但事实上我需要的
document.getElementById('monsters[0])
(dystroy的回答)因为我在动态地做这件事,这只是一个例子,但真的很感谢you@tryingToGetProgrammingStraight-没有任何东西可以阻止您向字符串动态添加
\
字符,因此您不需要避免使用选择器语法。您实际上是在尝试
document.getElementById('monsters[0]”后立即使用的
我意识到我必须动态添加转义。你能让我的生活更轻松吗?请告诉我如何添加这些转义或给我一个解释链接?@tryingtogetprogrammingdirect-原始答案中有一个例子。一旦它们成为字符串的一部分,就可以像对待任何其他字符一样对待它们。