Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';排除嵌套子代的jquery选择器是什么?_Javascript_Jquery_Jquery Selectors_Yui - Fatal编程技术网

Javascript 什么';排除嵌套子代的jquery选择器是什么?

Javascript 什么';排除嵌套子代的jquery选择器是什么?,javascript,jquery,jquery-selectors,yui,Javascript,Jquery,Jquery Selectors,Yui,,它已经求助于jquery来解决这个问题,但如果我想清楚的话,它可能会回到YUI中,我需要一个选择器来排除后代 提出的解决方案是这样的: $( '.revealer:not(.revealer > .revealer)' ); 为了更准确地适应我的情况,因为我有多个HTML块要执行相同的测试,所以我将其更新为: $( '#_revealerEl_0 .handle:not(#_revealerEl_0 .reveal .handle)' ); HTML在其上选择(图像页面上有许多相同区

,它已经求助于jquery来解决这个问题,但如果我想清楚的话,它可能会回到YUI中,我需要一个选择器来排除后代

提出的解决方案是这样的:

$( '.revealer:not(.revealer > .revealer)' );
为了更准确地适应我的情况,因为我有多个HTML块要执行相同的测试,所以我将其更新为:

$( '#_revealerEl_0 .handle:not(#_revealerEl_0 .reveal .handle)' );
HTML在其上选择(图像页面上有许多相同区块的副本,每个副本都需要单独处理-为每个“revealer”分配一个id属性):


内容A

内容B

子内容A

子内容B

简而言之:我需要针对每个revealer的“热点”中的“顶级”句柄,并且没有具有相同类名的嵌套子代

谢谢, d

编辑:


同样重要的是,我不要开始依赖子体属性,如parentNode、childNode[x]、nextSibling等。。。因为目前这个模块非常灵活,它的“显示”和“句柄”元素可以驻留在其他标记中,并且仍然是目标-只要它们在“热点”中找到。

我不知道哪个是你的
#u revealerEl\u 0
元素,但是如果它是你的顶级
.revealer
,你就不能这样做吗

$('#_revealerEl_0 > .hotspot > .handle')
或者,如果顶级
.revealer
本身是
#u revealerEl_0
的后代,则此操作有效:

$('#_revealerEl_0 > .revealer > .hotspot > .handle')
这里的基本前提是链接多个
子组合符。

尝试以下方法:

         obj = $('.revealer[id*="revealerEl"]');
    //this will give you what you are after
     result = $("> .hotspot > .handle",obj)

    //if you want to see them in red
         $("> .hotspot > .handle",obj).css('color','red');

//or assign a click to it
 $("> .hotspot > .handle",obj).click(function(){
//blah ....
})

这对我使用jQuery是有效的:

$('.revealer:first > .hotspot > .reveal')
给定第一个展示者,找到任何属于直接子对象的热点,并在其中找到任何直接展示项目

因此,要为“句柄”分配句柄,请执行以下操作:

$('.handle').click(function(){
    $(this).closest('.hotspot > .reveal').show();
});
上述情况转化为:

  • 对于任何给定的句柄,为元素指定一个单击事件函数
  • 单击句柄时,查找其最近的父热点
  • 从热点中,查找作为热点直接子级的任何显示元素
  • 如果这些元素是用display:none隐藏的,则显示这些元素

我已经修改了上面的代码以获得id,很抱歉,在我的模块实例化之前它没有id,但是从我的测试中,我发现了这里提到的另一个问题-您的代码将继续以嵌套的“revealer”容器为目标。我需要获取所有句柄(可以有多个句柄类元素),但在嵌套的展示器中不能获取句柄。我用jquery的思维方式用YUI解决了这个问题,但作为CSS3选择的一个教训,出于兴趣,我继续尝试并实现了其中的一些解决方案。虽然说实话,我没办法把它们捡起来,但我认为它们在一个更干净的环境中工作,那里可能不会有太多事情发生。无论哪种方式,我围绕你的所有建议所做的阅读都非常有趣-因此感谢你的帮助。好的,倒带(阅读:无法编辑我的最后一条评论),“我现在确实得到了你的第一条建议,它做得非常好”。@Danjah尽管我的回答和评论告诉我们,>选择器只会找到直接的孩子,不是第一个孩子。因此,RHS.parentNode()==LHS。这在所有情况下都有效吗?我都有。我在寻找正确的选择器,以针对“热点”、“展示器”中的所有潜在“句柄”类元素,但在嵌套在另一个“展示器”中的“展示器”中找不到句柄。我编辑了我的问题,以反映不依赖兄弟/父/子关系的重要性,从我的另一个问题,因为从理论上讲,对于我目前拥有的(并且正在努力清理的)庞大而笨拙的代码,我可以随时向这些对象添加额外的标记,并且它们的功能保持不变,因为它们是面向类的。我更改了我的答案以解决您的问题。这看起来很简洁,也是我想要的,但似乎没有针对我想要的。下面是我运行的代码:var obj=$('.revealer[id*=“'+this.id()+']);日志(转储($(“>.hotspot>.handle”,obj).css('color','red'));在this.id()获取元素id的地方(根据我的示例,假设它的“\u revealerEl\u 0”),jquery选择上YUI对象转储的输出是:{length=>0,prevObject=>{length=>0}它返回null,因为您的obj定义将返回null。您的obj必须准确地返回所有具有id的展示者,在您的示例中,this.id()将返回null,因为在此上下文中没有此项…您的可能副本应在上一个问题中进行额外详细编辑,而不是询问解决完全相同问题的新问题。您使用YUI(首选),一个是使用jquery——我被限制为5个标记,并且我公开地将它们链接在一起。当然,继续并关闭,什么。这看起来很整洁,我会用很多东西,你能告诉我吗?“direct”你的字面意思是“前面的元素”,因为它本质上必须是“parentNode”?希望不会,因为我肯定会发现它的用处。@Danjah它值得探索关于选择器的jquery文档,因为它非常全面。>语法意味着RHS.parentNode==LHS。因此,reveal.parentNode==热点。如果不能保证hotspot是父节点,那么显然这是行不通的。
$('.handle').click(function(){
    $(this).closest('.hotspot > .reveal').show();
});