在jQuery中找不到DOM元素

在jQuery中找不到DOM元素,jquery,ruby-on-rails,Jquery,Ruby On Rails,我快疯了。看看这把小提琴: 这是来自Rails网站的相关代码,我正在为FantasyFootball工作。每次更改类型选择时,我想将方向选择重置为选择,以减少在填充字段后更改类型时发生的混乱 除非我不能 无论我做什么,我都无法进入那个愚蠢的方向选择。如果你看,你会看到这两行: $('div', location).next('.player-trade-fields').hide(); $('div', location).next('.terms-field').show(); 对任何人来

我快疯了。看看这把小提琴:

这是来自Rails网站的相关代码,我正在为FantasyFootball工作。每次更改类型选择时,我想将方向选择重置为选择,以减少在填充字段后更改类型时发生的混乱

除非我不能

无论我做什么,我都无法进入那个愚蠢的方向选择。如果你看,你会看到这两行:

$('div', location).next('.player-trade-fields').hide();
$('div', location).next('.terms-field').show();
对任何人来说都不是一件令人震惊的事情:它们完全按照它们应该的方式工作,没有任何问题。但当我尝试访问与这两个字段处于相同DOM级别的Direction select时:

$('div', location).next('.trade-direction')
我什么也得不到。我在那里有一个警报,告诉我是否返回了一个值,而我所做的任何事情都不会返回一个值。我不明白。我不明白jQuery怎么会找不到它。我试过:

location.next
selectBox.next
$('div', selectBox).next
$('div', selectBox.parent()).next
$('div', selectBox.parent().parent()).next
$('div', selectBox.parent().parent().parent()).next
$('div', selectBox.parent().parent().parent().parent()).next
什么都不管用。无论我做什么,我都无法得到这个选择,在2个小时的时间完全浪费在某些事情上之后,据我所知,这些事情应该可以正常工作,就像同一级别的字段代码一样,我放弃了


请告诉我我忽略了什么明显的东西。

把它弄明白了。我把它改成:

$('div', location).find('.trade-direction')

当页面上通过ajax添加了此表单的多个实例时,它完全按照它应该的方式工作,并且不会产生干扰。

您是否理解这一点。nextselector只查看同一级别的下一个同级对象,并评估该DOM对象,以查看它是否与选择器匹配。如果该同级与选择器不匹配,则返回的jQuery对象为空。它不会通过其他同级查找与该选择器匹配的内容。这是一个常见的误解。下一步是如何工作的。您可能想改为使用.nextAllselector或.nextAllselector.first。您也可以使用.sides'…'。首先,为什么完全相同的语法可以用于查找其他字段?我的意思是,从顶部下拉列表中选择某人。然后从类型中选择播放器。并在“方向”字段中选择“到”或“从”。然后,将类型更改为其他类型。您会注意到术语和播放器下拉列表的隐藏/显示取决于此。使用$'div',location.next'.player trade fields.hide;$访问术语和玩家字段div',location.next',terms field',show;和在DOM中与方向框处于同一级别。但是使用相同的语法会导致多次未定义。仅供参考,如果HTML全部正确缩进,您的HTML将更易于阅读。我在我的小屏幕笔记本电脑上根本无法遵循等级制度。$'div',location.find'.trade direction'可能效率很低,因为您在位置中的每个div下面进行单独的查找,甚至可能不接近效率。你可以只做location.find.trade direction吗?它在实际的站点上…我不知道为什么粘贴到JSFIDLE后会如此混乱。我还意识到player trade fields和terms fields类位于这些字段周围的div上,而不是字段本身,因此我确信这与代码不起作用的原因有关。我知道,“发现”不是最好的解决方案,但就目前而言,它正在发挥作用,这就是我所关心的。