-2

我正在使用这条 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>-element<ul>不幸的是,这行代码在 jQuery 1.8.3 中不起作用

错误消息是 Error: Syntax error, unrecognized expression: div[id='gallery-'+nr] ul.previews Bronbestand: http://www.inwording.nl/supportbeta/wp-includes/js/jquery/jquery.js ?ver=1.8.3 Regel: 2

所以它与代码的 appendTo 部分有关。

我可以将其更改为

.appendTo("div[id='gallery-'+nr] ul[class='previews']");

这会删除错误消息,但不会将该元素添加到我的列表中。

我可以将 jQuery 版本改回 1.7.2,但我不确定这是要走的路,因为这是 WordPress 插件的一部分,并且 WordPress 3.5+ 附带 jQuery 1.8.3。其他插件可能依赖于 1.8.3,如果我将其更改回 1.7.2,它将破坏其他插件。

我试图找出 1.7.2 和 1.8.3 之间的差异,但找不到与我使用的代码相关的任何信息。

有没有人见过这个问题?

4

1 回答 1

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>

并给定一个nr当前值为 9 的变量,您可以选择<ul>这样的:

$( "div[id='gallery-" + nr + "'] ul[class='previews']" )

我怀疑我的猜测是错误的,因为您提到代码在 jQuery 1.7.2 中有效。但以防万一,我将在此处留下这部分答案并提出一些相关建议:

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

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

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

$( '#gallery-' + nr + ' ul.previews li[id*="preview-"]' )
    .last()
    .clone()
    .attr( 'id', 'preview-extra' )
    .appendTo( 'div[id="gallery-' + nr + '"] ul.previews' );
于 2013-06-18T13:59:02.847 回答