【问题标题】:Is there a work around for this jQuery bug?这个 jQuery 错误有解决方法吗?
【发布时间】:2010-01-14 15:16:12
【问题描述】:
$('> 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"]');

【问题讨论】:

  • 如果您不相信这是一个错误,请在 JSBin 上查看此示例:jsbin.com/itufa/edit 当您切换到“输出”时,您会看到问题。
  • 什么是 $scope?你在哪里定义它?为什么要对变量使用 PHP 语法?
  • 未知,我已经用一个工作示例更新了我的答案。

标签: jquery css-selectors


【解决方案1】:

经过测试和工作:

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

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

-- 与--

$(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”的必要条件。这当然是一个错误,但不是不可克服的。

【讨论】:

  • 我从未见过$=,这是什么意思?
  • 这意味着属性“以”特定值结尾。
  • 显然,确切的值不被 jQuery 理解为确切的值。原来它一个错误,但不是一个不可克服的错误。如果这有帮助,请考虑接受。
  • 是的,我会接受你的回答并加一票。但我仍然不明白为什么这里需要$=
  • 未知,很奇怪。我将在我的答案中添加一些进一步的讨论。继续看:)
【解决方案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")...

这将快得多

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2011-11-03
    • 1970-01-01
    • 2012-03-13
    相关资源
    最近更新 更多