在jQuery 1.9中移除了.selector属性,现在有什么替代方法?

6
自从 jQuery 1.9 版本开始,jQuery 对象的 .selector 属性已被移除。(我对其确切原因有些困惑)。我在一些独特的情况下实际上会使用它,并且我知道我可以做其他事情来避免这种情况。请问是否有人知道在 1.9 版本之后另一种获取选择器的方法?
$('#whatever').selector // (would of returned '#whatever')  

我需要使用 .selector 的一个例子是当我已经有一组通过name进行分组的复选框,并且我想查看该组中哪个被 checked

jsFiddle DEMO

var $test = $('input[name="test"]');

console.log( $test );
console.log( $(':checked', $test).attr('id') ); // returns --undefined--

console.log( 'now with .selector: ');
console.log( $($test.selector + ':checked').attr('id') ); // returns correct

从文档中得知,jQuery对象上的已弃用的 .selector 属性的剩余目的是支持已弃用的 .live() 事件。自从 1.9 版本开始,jQuery不再尝试在链式方法中维护此属性,因为使用 .live() 永远不支持链式方法。请勿在 jQuery 对象上使用 .selector 属性。jQuery Migrate 插件也不会尝试维护此属性。

5
可以提供其中几种独特场景之一吗?(请提供代码而非描述) - PlantTheIdea
2
$('#whatever').selector 似乎仍然有效。文档说:“在1.9中,jQuery不再尝试在链接方法中维护此属性[...]”。但是http://api.jquery.com/selector/声称已经删除了它。我不知道,有点混淆。我想官方声明可能会澄清这一点,也许您可以在他们的邮件列表/论坛/组/任何地方发布。 - Felix Kling
1
为什么不单独存储选择器? - marsze
3
在你的使用情况中,可以使用 .filterhttp://api.jquery.com/filter/。`$test.filter(':checked').attr('id')`。 $(':checked', $test) 无法工作,因为 input 元素没有任何后代。 - Felix Kling
2
是的,我们总是学到新东西 :) - Felix Kling
显示剩余5条评论
3个回答

4

实际上并不需要太多理由来使用原始选择器。在您的特定用例中,如果您想缩小所选元素集合的范围,可以使用.filter [文档]

$test.filter(':checked').attr('id')

$('#whatever').selector 仍然可以正常工作。文档中说:"在1.9版本中,jQuery不再尝试在链式方法中维护此属性[...] "。虽然http://api.jquery.com/selector声称它已在1.9版本中删除。我不知道,有点混淆。


谢谢!可能是我脑子抽了...过度反应以为它消失了哈哈 - Mark Pieszak - Trilon.io

0
对于我正在处理的代码,我成功地进行了替换。
if ($elem.selector == 'date-column-filter')){

使用

if ($elem.hasClass('date-column-filter')){

0
我会将选择器保存在一个变量中,像这样:

var testSelector = 'input[name="test"]';
var test = $(testSelector);
console.log( $(testSelector + ':checked').attr('id') );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接