2012-03-23 2 views
1

Вот что хлопотно. Я не могу правильно определить местонахождение вложенного 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> 

ответ

5

Прежде всего внутри обработчика успеха $.postthis действительно указывает на собственный контекст выполнения. Далее вам нужно передать элемент 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(); 
}); 
+0

Аааа! Да спасибо. Это сработало, я ценю это. – Yahreen

+2

+1 за то, что бил меня (и отправлял то же самое, что и я). –

0

ли showContentAgency функция внутри обработчика, или это само по себе? Если он сам по себе, то будет ссылаться на объект окна, а $(this) не вернет ничего значимого, а $(this).parent() ничего полезного не сделает.

Возможно, в обработчике вы должны заменить линию showContentAgency(numbs); на showContentAgency.call(this, numbs);.

+0

Внутри '$ .post' это все равно не то, что вы хотите. Вам все равно нужно назначить его переменной. –

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); 
Смежные вопросы