【问题标题】:jQuery selector bug? composed selector vs. simple selector & find()jQuery 选择器错误?组合选择器 vs. 简单选择器 & find()
【发布时间】:2011-12-14 16:05:23
【问题描述】:

我的情况有些尴尬……我有这样的事情:

<div id="selector">
   <input type='radio' />
   <input type='radio' />
   <input type='radio' />
</div>

如果我使用$("#selector input[type=radio]") 会找到所有三个元素,但如果我使用$("#selector").find("input[type=radio]") 甚至find("input") 只会找到第一个。

这是 jQuery 中的错误吗?我没有正确使用find()吗?

澄清:我想使用 find() 来获取所有输入,但我尝试的任何操作都只能找到第一个。

编辑:我正在使用 jquery 1.3.2

【问题讨论】:

  • 与许多其他 JavaScript 框架不同,当您执行 $('input') 之类的搜索时,jQuery 不会按 ID 获取元素。您需要在 ID 前面加上 #: $('#selector')
  • 我修正了这个例子......这是一个错字。

标签: javascript jquery sizzle


【解决方案1】:

你真正想要的是:

$("#selector > :radio")

至于为什么你只得到一个,我需要查看正在运行的实际代码,因为 find() 不会停在一个并且会找到所有匹配项,所以这可能是你使用它的方式这就是问题所在。

【讨论】:

  • 我也在firebug控制台中尝试过这个,两个命令返回不同的结果:复合选择器返回全部,find()只返回第一个。
【解决方案2】:

这两个代码片段应该返回相同的结果。

你是说当你运行下面的代码时,第一个alert会显示“3”,第二个会显示“1”?

var a = $("#selector input[type=radio]");
var b = $("#selector").find("input[type=radio]");

alert(a.length);
alert(b.length);

你能验证一下吗?

【讨论】:

    【解决方案3】:

    试试

    $("#selector").find("input[type=radio]")

    【讨论】:

    • 这就是我正在使用的,对不起这个不好的例子:)
    【解决方案4】:

    See here

    这三个都返回相同的结果!

    $(function() {
        console.log($("#selector input[type=radio]"));          // 3
        console.log($("#selector").find("input[type=radio]"));  // 3
        console.log($("#selector").find("input"));              // 3
    });
    

    【讨论】:

      【解决方案5】:

      $("#selector").children("input[@type=radio]")

      【讨论】:

      • jQuery 不再支持 @ 选择属性
      猜你喜欢
      • 2011-09-07
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2013-06-20
      • 2010-11-15
      • 2011-09-08
      • 2010-11-16
      相关资源
      最近更新 更多