这个jQuery bug有解决方法吗?

这个jQuery bug有解决方法吗?,jquery,css-selectors,Jquery,Css Selectors,上述操作将失败,这似乎是jQuery的一个缺陷,有解决方法吗 此问题可在此处找到: 编辑 我刚刚验证了这也会失败: $('> img[src="folderopen.gif"]',$scope) 已测试,且有效: 在线演示: -也适用于您的原始语法- $(function(){ var scope = $("#scope"); alert( $(scope).children("img[src$='foo.jpg']").attr(&quo

上述操作将失败,这似乎是jQuery的一个缺陷,有解决方法吗

此问题可在此处找到:

编辑

我刚刚验证了这也会失败:

$('> img[src="folderopen.gif"]',$scope)
已测试,且有效: 在线演示:

-也适用于您的原始语法-

$(function(){
  var scope = $("#scope");
  alert( $(scope).children("img[src$='foo.jpg']").attr("src") );
});
一只有趣的虫子 我们知道我们的src值是foo.jpg,但以下失败:

var img = $("> img[src$='foo.jpg']", scope);
所以我很好奇jQuery对src的解释是否与我在HTML中提供的字符串文本源相同:

$("img[src='foo.jpg']");
这使得整个情况非常奇怪。jQuery认为,当您将src值作为选择器的一部分传入时,它不等于foo.jpg,但当您从调用attr进行比较时,它等于字符串文本

最后,$=是让jQuery同意foo.jpg等于foo.jpg所必需的。这当然是一个bug,但不是无法克服的。

经过测试,可以正常工作: 在线演示:

-也适用于您的原始语法-

$(function(){
  var scope = $("#scope");
  alert( $(scope).children("img[src$='foo.jpg']").attr("src") );
});
一只有趣的虫子 我们知道我们的src值是foo.jpg,但以下失败:

var img = $("> img[src$='foo.jpg']", scope);
所以我很好奇jQuery对src的解释是否与我在HTML中提供的字符串文本源相同:

$("img[src='foo.jpg']");
这使得整个情况非常奇怪。jQuery认为,当您将src值作为选择器的一部分传入时,它不等于foo.jpg,但当您从调用attr进行比较时,它等于字符串文本

最后,$=是让jQuery同意foo.jpg等于foo.jpg所必需的。这当然是一个bug,但不是一个无法克服的bug。

您只需执行以下操作:

$("img", scope).attr("src") === "foo.jpg"; // true
从这个表达式中,我假设您正在执行类似于Windows资源管理器的树状结构。如果是这样的话,我强烈建议您使用类作为标记,而不是使用属性选择器,这在大多数浏览器上都很慢。例如,使用此CSS:

$(scope).children("img[src='folderopen.gif']");
然后你会做:

ul.tree li { background: url(folderclosed.gif); }
ul.tree li.open { background: url(folderopen.gif); }
这会快得多。

您只需执行以下操作:

$("img", scope).attr("src") === "foo.jpg"; // true
从这个表达式中,我假设您正在执行类似于Windows资源管理器的树状结构。如果是这样的话,我强烈建议您使用类作为标记,而不是使用属性选择器,这在大多数浏览器上都很慢。例如,使用此CSS:

$(scope).children("img[src='folderopen.gif']");
然后你会做:

ul.tree li { background: url(folderclosed.gif); }
ul.tree li.open { background: url(folderopen.gif); }

这会更快。

对于那些不相信这是一个bug的人,请参见JSBin上的示例:当您切换到输出时,您将看到问题。什么是$scope?你在哪里定义它?为什么要对变量使用PHP语法?未知,我已经用一个工作示例更新了我的答案。对于那些不相信这是错误的人,请参阅JSBin上的示例:当您切换到输出时,您将看到问题。什么是$scope?你在哪里定义它?为什么要对变量使用PHP语法?未知,我已经用一个工作示例更新了我的答案。我从来没有见过$=,它是什么意思?它意味着属性以一个特定的值结束。显然jQuery不理解确切的值。事实证明这是一个bug,但不是一个无法克服的bug。如果这有帮助,请考虑接受。是的,我会接受你的回答加上1票。但是我仍然不明白为什么$=是必要的。未知,这是非常奇怪的。我将在我的回答中添加一些进一步的讨论。继续关注:我从未见过$=,它意味着什么?它意味着属性以一个特定的值结束。显然,jQuery并不理解确切的值。事实证明这是一个bug,但不是一个无法克服的bug。如果这有帮助,请考虑接受。是的,我会接受你的回答加上1票。但是我仍然不明白为什么$=是必要的。未知,这是非常奇怪的。我将在我的回答中添加一些进一步的讨论。继续关注: