我正在使用这个jQuery代码行,它可以在安装了jQuery 1.7.2版的情况下正常运行
$("div[id='gallery-'+nr] ul.previews li[id*='preview-']").last().clone().attr('id','preview-extra').appendTo("div[id='gallery-'+nr] ul.previews");
我在<li>
列表中添加了<ul>
- 元素
不幸的是,这行代码在jQuery 1.8.3中不起作用
错误消息是 错误:语法错误,无法识别的表达式:div [id ='gallery - '+ nr] ul.previews Bronbestand:http://www.inwording.nl/supportbeta/wp-includes/js/jquery/jquery.js?ver=1.8.3 雷格尔:2
所以它与代码的appendTo部分有关。
我可以将其改为
.appendTo("div[id='gallery-'+nr] ul[class='previews']");
这会删除errormessage,但不会将该元素添加到我的列表中。
我可以将jQuery版本更改回1.7.2但我不确定这是否可行,因为这是WordPress插件的一部分,WordPress 3.5+附带jQuery 1.8.3。其他插件可能依赖于1.8.3,如果我将其更改回1.7.2,它将破坏其他插件。
我试图找到1.7.2和1.8.3之间的差异,但找不到与我使用的代码相关的任何信息。
之前有没有人见过这个问题?
答案 0 :(得分:1)
nr
是您用来粘贴选择器的变量,还是实际上是id
<div>
的一部分?
换句话说,这是HTML代码中的内容吗?
<div id="gallery-+nr">
这是一个不寻常的id
,但它在HTML5中有效。
如果它就是这样,那么问题只是其中一个引号位于此选择器的错误位置:
div[id='gallery-'+nr]
那需要是:
div[id='gallery-+nr']
第一个版本是一个无效的选择器,当你单独使用它时,甚至jQuery 1.7.2都会拒绝:
> $("div[id='gallery-'+nr]")
Error: Syntax error, unrecognized expression: [id='gallery-'+nr]
奇怪的是,1.7.2 允许此选择器在代码中用作较长选择器的一部分时使用
> $("div[id='gallery-'+nr] ul[class='previews']")
[ ul.previews ]
错误检查在1.8.3中变得更严格,它也拒绝这种形式的选择器。但是再次将其更改为可行:
$("div[id='gallery-+nr'] ul[class='previews']")
现在,当我第一次阅读您的问题时,我认为nr
实际上是一个变量,应该在选择器中连接成id
字符串,例如你可能有这个HTML:
<div id="gallery-9">
<ul class="previews">
</ul>
</div>
并且给出了当前值为9的变量nr
,您可以像这样选择<ul>
:
$( "div[id='gallery-" + nr + "'] ul[class='previews']" )
我怀疑我猜错了,因为你提到代码在jQuery 1.7.2中有效。但是为了以防万一,我将在这里留下这部分答案,并附上一些相关的建议:
无论哪种方式都可行,但我建议更换单引号和双引号,因此JavaScript字符串是单引号,而选择器内的属性是双引号。这样,它遵循选择器的jQuery文档,并且与您的其他引用字符串一致。
使用单独的行而不是一条长行的方法调用来格式化长jQuery链是有帮助的。
将所有这些放在一起,代码可能如下所示:
$( '#gallery-' + nr + ' ul.previews li[id*="preview-"]' )
.last()
.clone()
.attr( 'id', 'preview-extra' )
.appendTo( 'div[id="gallery-' + nr + '"] ul.previews' );