我将我的网站升级到最新的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();
}
});

我无法绕过它。 任何帮助将不胜感激。
答案 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();
}
});
}
...我不禁想知道代码片段的目的是什么......试图删除重复的元素......?他们为什么一开始就在那里?