我该如何定位"这个" "这个""儿童?

时间:2016-11-07 16:26:08

标签: javascript jquery this parent-child dom-traversal

您好我正在尝试定位" " >

的儿童后代

以下是包含子列表的列表。

我想要完成的是了解如何选择 这个的孩子。

基本上当我点击本田时,子列表会展开,我想在我点击它时控制每个所选元素的文本。出于简化目的,我将代码更改为console.log。

到目前为止,下面的代码返回的是li中所有内容的文本。

IE 如果我点击Honda或者如果我点击Accord,控制台将返回值" Honda,Accord和CRV。"

我将如何遍历"这"获取被点击的孩子的文字#34;这个"。 "这" "这"。

IE 如果我使用下面的代码选择" Accord" ,则应返回&# 34;单独使用Accord"

代码:

<ul class="main-menu">
CARS
<ul>
    <li class="has-subs">
        <a href="">Honda</a>
        <ul class="sub-menu">
            <li><a href="">Accord</a></li>
            <li><a href="">CRV</a></li>
        </ul>
    </li>
    <li class="has-subs">
        <a href="">Ford</a>
        <ul class="sub-menu">
            <li><a href="">Mustang</a></li>
            <li><a href="">Explorer</a></li>
        </ul>
    </li>
</ul>

$('body').on('click', '.main-menu ul li', function (e) {
e.preventDefault();
$this = $(this);
console.log($this.text());


if ($(this).find("a").text() == "CRV") {
    var subMenu = $this.siblings('.sub-menu');
    console.log("'THIS' SELECTOR IS WORKING AS INTENDED!");
}
})

更新:

谢谢大家回答!我认为这有助于进一步解释我想要实现的目标。

我最终想要解决的是,我有一个主要的手风琴列表,其中包含汽车制造商列表,每个制造商都有如上所示的子菜单。

我想点击一个列表项目,比如本田,它只扩展本田的名单,并显示他们的品牌,即雅阁和CRV。然后,当我点击Accord或CRV时,它会转到各自的网页。

当我点击福特时,本田的名单应该崩溃或被隐藏,福特应该扩大。

2 个答案:

答案 0 :(得分:0)

您当前的选择器

.main-menu ul li

会在.main-menu下找到所有 ul / li,因此会匹配Honda Accord / CRV。

如果您只想对顶级项目(本田)采取行动,您可以将选择器更改为更具体:

.main-menu>ul>li

(假设它们在内部正确.main-menu)。

或者,如果您只想要较低的那些:

.main-menu>ul>li>ul>li

或者,在您的情况下,直接定位'ul'

ul.has-subs>li

ul.sub-menu>li

答案 1 :(得分:0)

这是一个解决方案,可让您的代码以最小的更改工作,但请注意,此设置存在问题,因为它会在每次点击时创建一个新的(重复的)事件侦听器。

$('body').on('click', '.main-menu ul li', function (e) {
  e.preventDefault();
  $this = $(this);
  console.log($this.text());

  $this.on('click', 'li', function(e) {
    if ($(this).find("a").text() == "CRV") {
      var subMenu = $this.siblings('.sub-menu');
      console.log("'THIS' SELECTOR IS WORKING AS INTENDED!");
    }
  })
})

正如@ freedomn-m指出的那样,你的选择者可能过于宽泛。我不完全确定您最终会尝试选择子菜单的行,但这里有一个更干净的替代解决方案:

$('.has-subs>a').click(function(e) {
  e.preventDefault();
  console.log($(this).parent().text());
});

$('.sub-menu>li>a').click(function(e) {
  e.preventDefault();
  console.log($(this).text());
});

jsbin:http://jsbin.com/lurutiwago/edit?html,js,console,output