$('> 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"]');
答案 0 :(得分:4)
<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")...
将更多更快。