查找列表项的子元素

时间:2012-03-23 17:44:47

标签: javascript jquery

这是麻烦的功能。我无法正确找到嵌套的UL元素:

function showContentAgency(id){
  $.post("assets/includes/contentAgency.php?id=id", {id: id}, function(data){
    $(this).parent().find("ul").html(data).show();
    $(this).addClass("nav-active");
  });
}

这是点击功能:

$("ul.top-level").on("click", "ul.top-level li.agency a", function (event) {
    var numbs = $(this).attr("href").match(/id=([0-9]+)/)[1];
    $("ul.top-level li a").removeClass("nav-active");
    $(this).addClass("nav-active");
    showContentAgency(numbs);
    event.preventDefault();
});

我的HTML显示如下:

<ul class="top-level" style="display: block; ">
    <li class="agency"><a href="contentAgency.php?id=6" class="">Agency Name</a>
    <ul>
        <!--Content in here -->
    </ul>
    </li>
</ul>

3 个答案:

答案 0 :(得分:5)

首先,$.post this的内部成功处理程序指向它自己的执行上下文。接下来,您必须将dom元素传递给showContentAgency方法,您可以使用该方法找到所需的ul元素。试试这个。

function showContentAgency(id, elem){
   $.post("assets/includes/contentAgency.php?id=id", {id: id}, function(data){
       $(elem).addClass("nav-active").parent().find("ul").html(data).show();
   });
}


$("ul.top-level").on("click", "ul.top-level li.agency a", function (event) {
    var numbs = $(this).attr("href").match(/id=([0-9]+)/)[1];
    $("ul.top-level li a").removeClass("nav-active");
    $(this).addClass("nav-active");
    showContentAgency(numbs, this);
    event.preventDefault();
});

答案 1 :(得分:2)

$.post内,this不是元素,我认为它是XHR对象。

尝试将this传递给showContentAgency

function showContentAgency(id, ele){
  $.post("assets/includes/contentAgency.php?id=id", {id: id}, function(data){
    $(ele).parent().find("ul").html(data).show();
    $(ele).addClass("nav-active");
  });
}

然后:

showContentAgency(numbs, this);

答案 2 :(得分:0)

showContentAgency函数是在处理程序中,还是它本身?如果它本身,那么this将引用窗口对象,$(this)将不会返回任何有意义的内容,$(this).parent()将不会执行任何有用的操作。

也许,在点击处理程序中,您应该将行showContentAgency(numbs);替换为showContentAgency.call(this, numbs);