用最新的jquery构建循环遍历div ID的麻烦

时间:2015-07-12 17:16:22

标签: javascript jquery

我将我的网站升级到最新的jquery版本(2.1.4),并且我试图调试它抛出的许多错误。

然而,我一直收到错误"无法识别的表达式:[id =]"在以下脚本上:



setTimeout(function() {
$(".cab_librovisitas, .cuerpo_librovisitas, .cuerpo_librovisitas_user").each(function () {
  var ids = $('[id=' + this.id + ']');
  if (ids.length > 1 && ids[0] == this) {
    $(ids[1]).remove();
  }
});




我无法绕过它。 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

起初我打算写一篇评论,建议将支持请求直接放在jQuery上,但后来我看到了代码并认为它​​值得讨论。

首先,id属性是HTML中的特殊属性。它应该在整个文档中保持一个唯一的值(换句话说,没有两个元素可以具有相同的id),所以我发现代码可以工作很奇怪。

其次,当一个简单的document.getElementById()完成这个伎俩时,我没有看到任何你使用jQuery按id选择元素的原因。让我们说你想要一个jQuery元素。很好,即使在这种情况下,你的jQuery选择器还远非完美。一个更好的选择是$('#' + this.id);。也就是说,最好的替代方案是简单$(this) ......根本不需要担心id。

答案 1 :(得分:0)

也许我误解了新的jquery构建,但通常你会在jquery包装器中声明你的id

$('#myId')

您的代码正在分配

var ids = $('[id=' + this.id + ']');

转换为此

ids = $('[id=whateverThisIdIs]');

你能试试吗?

var ids = $('#' + this.id); // assuming this.id does not contain '#'.

最终

setTimeout(function() {
  $(".cab_librovisitas, .cuerpo_librovisitas, .cuerpo_librovisitas_user").each(function () {
  var ids = $('#' + this.id);
  // or this if you have the '#'
  // var ids = $(this.id);
  if (ids.length > 1 && ids[0] == this) {
    $(ids[1]).remove();
  }
});

其中一条评论提及

  

您的脚本意味着页面上有多个ID:不好。

如果您使用相同的ID,我认为您不会这样做。

答案 2 :(得分:0)

HTML中的某个地方是包含其中一个类.cab_librovisitas, .cuerpo_librovisitas, .cuerpo_librovisitas_user的元素,该元素没有id属性或者属于空属性。

更改行

var ids = $('[id=' + this.id + ']');

var ids = $('#' + this.id);

并且错误将消失。

或检查空id

setTimeout(function() {
    $(".cab_librovisitas, .cuerpo_librovisitas, .cuerpo_librovisitas_user").each(function () {
        if (!this.id) return;
        var ids = $('[id=' + this.id + ']');
        if (ids.length > 1 && ids[0] == this) {
            $(ids[1]).remove();
        }
    });
}

...我不禁想知道代码片段的目的是什么......试图删除重复的元素......?他们为什么一开始就在那里?