有没有解决这个jQuery错误?

时间:2010-01-14 06:41:15

标签: jquery css-selectors

$('> img[src="folderopen.gif"]',$scope)

上面会失败,似乎是jQuery的一个bug,有没有解决方法?

此问题可在此处找到:

How to judge whether there is a specific child(.haschild('#test[att="test"]')) with jQuery?

修改

我刚刚确认这也会失败:

$scope.children( 'img[src="folderopen.gif"]');

2 个答案:

答案 0 :(得分:4)

经过测试,并且可以工作:

在线演示:http://jsbin.com/uyuri3

<p id="scope"> 
  <img src="foo.jpg" /> 
</p>

- with -

$(function(){
  var scope = $("#scope");
  alert( $(scope).children("img[src$='foo.jpg']").attr("src") );
});

- 也适用于原始语法 -

var img = $("> img[src$='foo.jpg']", scope);

一个有趣的错误

我们知道我们的src值为foo.jpg,但以下操作失败:

$("img[src='foo.jpg']");

所以我很好奇jQuery对src的解释是否等于我在HTML中提供的字符串文字来源:

$("img", scope).attr("src") === "foo.jpg"; // true

这使整个情况非常奇怪。 jQuery认为当你作为选择器的一部分传递时,src NOT 等于“foo.jpg”,但 IS 等于从调用attr()进行比较时的字符串文字。

最后,$=是让jQuery同意“foo.jpg”等于“foo.jpg”所必需的。这肯定是一个错误,但不是一个不可逾越的错误。

答案 1 :(得分:2)

你应该这样做:

$(scope).children("img[src='folderopen.gif']");

从那个表达式开始,我假设你正在做某种类似树的结构(比如Windows资源管理器)。如果是这样,我强烈建议您使用类作为标记而不是使用属性选择器,这在大多数浏览器上都很慢。例如,使用此CSS:

ul.tree li { background: url(folderclosed.gif); }
ul.tree li.open { background: url(folderopen.gif); }
然后你会这样做:

$(scope).children("li.open")...

更多更快。