jQuery版本1.7.2与1.8.3

时间:2013-06-18 13:45:16

标签: jquery

我正在使用这个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之间的差异,但找不到与我使用的代码相关的任何信息。

之前有没有人见过这个问题?

1 个答案:

答案 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中有效。但是为了以防万一,我将在这里留下这部分答案,并附上一些相关的建议:

  1. 无论哪种方式都可行,但我建议更换单引号和双引号,因此JavaScript字符串是单引号,而选择器内的属性是双引号。这样,它遵循选择器的jQuery文档,并且与您的其他引用字符串一致。

  2. 使用单独的行而不是一条长行的方法调用来格式化长jQuery链是有帮助的。

  3. 将所有这些放在一起,代码可能如下所示:

    $( '#gallery-' + nr + ' ul.previews li[id*="preview-"]' )
        .last()
        .clone()
        .attr( 'id', 'preview-extra' )
        .appendTo( 'div[id="gallery-' + nr + '"] ul.previews' );