这是麻烦的功能。我无法正确找到嵌套的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>
答案 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);
。