Javascript jQuery与属性过滤器最接近
jQuery 1.5.1是否支持最近方法中的属性选择器 给定下面的结构,Javascript jQuery与属性过滤器最接近,javascript,jquery,Javascript,Jquery,jQuery 1.5.1是否支持最近方法中的属性选择器 给定下面的结构,el表示值为513的复选框,我正试图访问并检查值为0的祖先复选框 $(el).closest("input[value='0']")[0].checked = true; 但是选择器没有返回任何内容 我错过了什么愚蠢的事情吗 编辑 唉,所以值为0的复选框不是el的祖先,只是ul祖先的兄弟。我要和它一起工作 $(el).closest("ul").siblings("input[value='0']")[0].check
el
表示值为513的复选框,我正试图访问并检查值为0的祖先复选框
$(el).closest("input[value='0']")[0].checked = true;
但是选择器没有返回任何内容
我错过了什么愚蠢的事情吗
编辑 唉,所以值为0的复选框不是
el
的祖先,只是ul
祖先的兄弟。我要和它一起工作
$(el).closest("ul").siblings("input[value='0']")[0].checked = true;
但是我们有更干净的方法来抓住它吗?检查:
最接近的检查,不在同一级别。关于您的问题:是的,是的(http://api.jquery.com/closest/)
您的代码不起作用,因为Nestest()在DOM树中向上移动,在您的情况下,它必须向上和向下移动,因为您的复选框0不是复选框513的祖先。我认为您不应该需要[0]as。Nestest只返回找到的第一个元素,而parents()返回多个
$(el).closest("input[value='0']").prop("checked") = true;
这是我更喜欢的方式
这是假设您在选中复选框513时尝试选中“值0”复选框
编辑:对不起,误读了。实际上,您需要尝试获取标记,然后获取底层复选框。您实际上是在查找非直接父项的复选框
编辑2:你意识到你的编辑不正确吗?等待它会。。。你用的是兄弟姐妹而不是孩子我错了
编辑3:如何使用:
$(el).parents().get(':eq(2)').children(':first-child');
或者我们不是假设布局是固定的吗?与任何其他jQuery方法一样支持属性选择器(尽管我不知道您提到的jQuery的具体版本),但这里的问题是,.closest()
不只是查看一般的邻近区域,而是通过祖先进行查找。您试图选择的输入元素不是您要开始的元素的祖先。(由于输入不能包含其他元素,因此它们永远不会是任何事物的祖先……)
您应该能够通过首先选择目标复选框的父li元素来完成此操作:
$(el).closest('li:has(input[value="0"])')
.find('input[value="0"]').prop("checked",true);
演示:
当然,如果您能够将一个类添加到顶级菜单项中,那么您就不需要乱用“:has”,您可以说:
$(el).closest('li.topMenu').find('input[value="0"]').prop("checked",true);
哇,我不敢相信你在问一个带有标签
jQuery
和javascript
的问题……你不是这里的javascript-jQuery大师吗?哈哈,大师?!一点也不。我很正派,但这里有很多人比我更有知识:)所以我猜你的javascript金质徽章是个错误。。。你是一个谦逊的人。@gdoron-记住,在很大程度上,代表和徽章是社区对你的信任程度,以及你对堆栈溢出的上瘾程度:)我对JavaScript和jQuery有相当多的了解,这在周六晚上是一个愚蠢的错误,但是有很多人知道的比我多,但名声却不好。不是吗?我是一个很好的例子。+1作为解释,但我不能使用prop,因为我在jQuery1.5上。你能想出一个比我的编辑更好的方法吗?根据我的编辑,我会给顶级li一个类并选择它,但实际上你的编辑(我当时没有看到)更好,因为它不需要更改标记。.prop()
部分并不是我答案的关键部分,我相信你知道你可以使用.attr(“checked”,“checked”)
,当然也可以坚持使用[0]。checked=true
,如果你确定总是有匹配的元素。我忘了在我的演示中设置正确的jQuery版本,但这里有一个1.4.4版本的更新:谢谢-你不必为我编造小提琴:)不客气。事实上,当我第一次回答这个问题时,我并没有真正注意到是谁在问这个问题——如果我真的注意到你的名字,我就会知道你会毫不费力地完全理解。(现在我知道是你,根据gdoron上面的评论,我有点惊讶…)是的-也许我不应该在周六晚上工作,因为有这么多干扰:-)我需要[0],因为我正在检查底层dom元素上的checked属性,我在发布后不久意识到,耐心地等待着洪水般的答案告诉我:)@AdamRackis hehe发生了什么:-)
$(el).closest('li.topMenu').find('input[value="0"]').prop("checked",true);