Javascript 找不到下一个元素
我希望在一个页面上有多个元素,当单击标题栏时,这些元素将切换下一个内容栏的可见性。所有内容范围的内容都隐藏在“文档准备就绪”上 当以整个类为目标时,内容切换起作用,但当尝试从单击的标题范围中以下一个内容范围元素为目标时,内容切换起作用 当我们试图操纵通过telerik radeditor输入的文本时,使用了特定的标记 HTMLJavascript 找不到下一个元素,javascript,jquery,html,Javascript,Jquery,Html,我希望在一个页面上有多个元素,当单击标题栏时,这些元素将切换下一个内容栏的可见性。所有内容范围的内容都隐藏在“文档准备就绪”上 当以整个类为目标时,内容切换起作用,但当尝试从单击的标题范围中以下一个内容范围元素为目标时,内容切换起作用 当我们试图操纵通过telerik radeditor输入的文本时,使用了特定的标记 HTML 您将上升一级,进入p元素,然后进入下一个元素(请参见下一个注释),但是。可折叠内容是该p的子元素,实际上是p元素的下一个()元素(因此过滤器也不匹配任何内容)next(
您将上升一级,进入
p
元素,然后进入下一个元素(请参见下一个注释),但是。可折叠内容是该p
的子元素,
实际上是p
元素的下一个()
元素(因此过滤器也不匹配任何内容)next()
只返回下一个元素,然后应用过滤器查看它是否匹配
放下parent()
并将nextAll()
与选择器一起使用:
$(document).ready(function () {
$('.collapsibleContent').hide();
$('.collapsibleHeader').click(function (e) {
$(this).nextAll('.collapsibleContent').toggle();
e.preventDefault();
});
$('.collapsibleContent2').hide();
$('.collapsibleHeader2').click(function (e) {
$('.collapsibleContent2').toggle();
e.preventDefault();
});
});
JSFiddle:
您可以将sibbins()
与相同的筛选器一起使用,但速度比nextAll()
慢。如果每个匹配项恰好有多个匹配项,也可以添加first()
e、 g
注:nextall
比sibbins()
和parent().children()
:您将上升一个级别,进入p
元素,然后进入next
下一个元素(见下一个注释),但是.collapsablecontent
是p
的子元素,
实际上是p
的下一个()
元素(因此过滤器也不匹配任何内容)next()
只返回下一个元素,然后应用过滤器查看它是否匹配
放下parent()
并将nextAll()
与选择器一起使用:
$(document).ready(function () {
$('.collapsibleContent').hide();
$('.collapsibleHeader').click(function (e) {
$(this).nextAll('.collapsibleContent').toggle();
e.preventDefault();
});
$('.collapsibleContent2').hide();
$('.collapsibleHeader2').click(function (e) {
$('.collapsibleContent2').toggle();
e.preventDefault();
});
});
JSFiddle:
您可以将sibbins()
与相同的筛选器一起使用,但速度比nextAll()
慢。如果每个匹配项恰好有多个匹配项,也可以添加first()
e、 g
注意:nextall
比兄弟姐妹()
和parent().children()
:next不起作用的原因是您使用的是parent()
在单击
回调函数中,您正在调用$(this).parent()
。调用回调时,$(this)
将是.collapsableheader
,因此当调用.parent()
时,它将返回p
标记
要获取.collapsablecontent
文件,必须调用.children('.collapsablecontent')
,而不是.next()
您的代码如下所示:
$(this).parent().children('.collapsibleContent').toggle();
jsiddle:next不起作用的原因是因为您使用的是parent()
在单击
回调函数中,您正在调用$(this).parent()
。调用回调时,$(this)
将是.collapsableheader
,因此当调用.parent()
时,它将返回p
标记
要获取.collapsablecontent
文件,必须调用.children('.collapsablecontent')
,而不是.next()
您的代码如下所示:
$(this).parent().children('.collapsibleContent').toggle();
jsIDLE:访问父级,然后访问.next()将获得下一段落元素,而不是内容。在这种情况下,没有必要打家长。您需要获取具有class.collapsablecontent的已单击元素的同级。在单击的元素上获取下一个元素也不会起作用,因为从技术上讲,标题后的下一个元素是一个中断标记。下面的方法可以实现这一目的:
$('.collapsableheader')。单击(函数(e){
e、 预防默认值();
$(this).sides('.collapsablecontent').toggle();
});代码>访问父级,然后访问.next()将获得下一段落元素,而不是内容。在这种情况下,没有必要打家长。您需要获取具有class.collapsablecontent的已单击元素的同级。在单击的元素上获取下一个元素也不会起作用,因为从技术上讲,标题后的下一个元素是一个中断标记。下面的方法可以实现这一目的:
$('.collapsableheader')。单击(函数(e){
e、 预防默认值();
$(this).sides('.collapsablecontent').toggle();
});
函数.next()
只查看起点后的一个同级元素。.next()
函数只查看起点后的一个同级元素。解决方案与nextAll()
相同(只是稍微慢一点)。如果知道方向,最好包括方向(nextAll
,prevAll
),如果可以:)@TrueBlueAussie你说得对,nextAll肯定更快。谢谢nextAll
只需导航相邻DOM节点的子集。我认为sides()
与parent()一样。children()
。另外nextAll
(和兄弟姐妹)比原始parent()快。children()
:与nextAll()
相同的解决方案(只是稍微慢一点)。如果知道方向,最好包括方向(nextAll
,prevAll
),如果可以:)@TrueBlueAussie你说得对,nextAll肯定更快。谢谢nextAll
只需导航相邻DOM节点的子集。我认为sides()
与parent()一样。children()
。另外nextAll
(和兄弟姐妹)比原始parent()快。children()
:注意:parent()。children(filter)
比使用nextAll(filter)
慢得多:注意:parent()。children(filter)
比使用nextAll(过滤器)
慢得多:
$(this).parent().children('.collapsibleContent').toggle();