jQuery最接近属性过滤器

时间:2012-02-05 01:28:04

标签: javascript jquery

jQuery 1.5.1是否支持最接近的方法中的属性选择器?

根据下面的结构,el代表值为513的复选框,我试图通过

来查看祖先复选框,其值为0
$(el).closest("input[value='0']")[0].checked = true;

但是选择器什么都没有返回。

我错过了一些愚蠢的事吗?

enter image description here


修改

叹息,因此值为0的复选框不是el的祖先,只是ul祖先的兄弟。我得到它与

一起工作
$(el).closest("ul").siblings("input[value='0']")[0].checked = true;

但我们有更清洁的方法来抓住它吗?

5 个答案:

答案 0 :(得分:15)

.closest() method 支持属性选择器与任何其他jQuery方法相同(虽然我不知道你提到的jQuery的特定版本),但这里的问题是.closest()不只是看一般的附近,而是通过祖先。您正在尝试选择的输入元素是您开始使用的元素的祖先。 (鉴于输入不能包含其他元素,它们永远不会成为任何东西的祖先......)

您应该可以先选择目标复选框的父li元素来执行此操作:

$(el).closest('li:has(input[value="0"])')
     .find('input[value="0"]').prop("checked",true);

演示:http://jsfiddle.net/Vpzyj/

当然,如果你能够在顶级菜单项中添加一个类,你就不需要乱用“:has”,你可以说:

$(el).closest('li.topMenu').find('input[value="0"]').prop("checked",true);

答案 1 :(得分:2)

我相信你不应该需要[0]因为.closest只返回找到的第一个元素,而不是parent(),它返回多个。

$(el).closest("input[value='0']").prop("checked") = true;

是我喜欢的方式。

这是假设您在检查513框时检查“值0”复选框。

编辑:对不起,误读了这个。实际上你需要尝试获得< \ li>标记然后获取底层复选框。您实际上在寻找不是直接父母的复选框。

编辑2:您意识到您的编辑无法正常工作?等等......它会...我使用兄弟姐妹而不是孩子我的错误。

编辑3:如何使用:

$(el).parents().get(':eq(2)').children(':first-child');

或者我们不假设布局是固定的?

答案 2 :(得分:1)

检查:http://api.jquery.com/closest/

.closest( selector ) // version added: 1.3

答案 3 :(得分:1)

最近的检查up the DOM tree而不是同一级别。

答案 4 :(得分:1)

关于你的问题:是的,(http://api.jquery.com/closest/)

您的代码不起作用,因为nearest()通过DOM树上升,在您的情况下,它必须上下移动,因为您的复选框0不是复选框513的祖先。

相关问题