2014-09-12 3 views
2

У меня есть эта часть HTML:Как получить родительский элемент?

<div id="menu"> 
    <ul> 
     <li><a href="/">Startseite</a></li> 
     <li class="active"><a href="/pacmodule/glass">Brillengl&#228;ser</a></li> 
     <li><a href="/pacmodule/completeglass">Komplettbrille</a></li> 
     <li><a href="/t/Comingsoon">Sportbrillen</a></li> 
     <li><a href="/PacCategoryRedirect/0">Marketing</a></li> 
     <li><a href="/customer/statistics">Statistik</a></li> 
    </ul> 
</div> 

Я хочу, чтобы удалить = "активный" параметр класса и установить его в теге LI, где у меня есть HREF = "/ pacmodule/completeglass" atribute.

Первая часть я успешно сделал с JQuery:

$("#menu").find("ul:first").find(".active").removeClass("active"); 

Но у меня есть проблемы со второй частью. Это выберите только тег:

$('a[href="/pacmodule/completeglass"]').parent().html(); 

И все это уль тег:

$('a[href="/pacmodule/completeglass"]').parent().parent().html(); 

Как я могу установить класс = "активный" атрибут в Li тег, где HREF = "/ pacmodule/completeglass"

Благодарим за помощь.

ответ

1

Вам не нужны звонки html(). Они просто возвращают innerHTML как строку. Вы, возможно, ожидали, что будет возвращать outerHTML (для outerHTML использовать что-то вроде ...parent()[0].outerHTML)

Попробуйте это:

$('a[href="/pacmodule/completeglass"]').closest('li').addClass('active'); 

Он найдет якорь на основе HREF = «/ pacmodule/completeglass», а затем найти ближайшего предка, который является LI, затем добавьте к нему класс active.

closest - самый полезный способ найти предка определенного типа. Это лучше, чем использование parent(), так как closest справляется с изменением структуры HTML.

Примечание: Если вы объясните общую цель, может быть лучший способ сделать это, чем поиск по HREF ссылки :)

Update

Вы не хотите, чтобы удалить предыдущий выбор с этим, как это слишком специфичны:

$("#menu").find("ul:first").find(".active").removeClass("active"); 

попробуйте вместо этого:

$("#menu li.active").removeClass("active"); 
+0

Вот это! Большое спасибо! – Korl

+1

@Korl: Нет проблем. Если вам не нужна дополнительная информация, пожалуйста, примите в качестве ответа/upvote. У вас теперь достаточно рейтинга :) –

0
$("#menu").find("ul:first").find(".active").removeClass("active"); 

Это можно сделать более эффективным писать как:

$("#menu").find("li.active").removeClass("active"); 

Тогда DOM не нужно искать любой ул, вместо этого он идет непосредственно к классу .active

+0

Почему бы не просто '$ (« # menu li.active »). RemoveClass (« active »);'? Я уже освещал это. Этот ответ на самом деле не отвечает на заданный вопрос, поэтому должен был быть комментарий. Приветствия. –

+0

Да, не видел ваши изменения, но из. WP @TrueBlueAussie –

0

легко сделать это (в ваш JS документ):

0

почему бы вам не попробовать это:

$("#menu").find("ul:first").find(".active").removeClass("active"); 
$('a[href="/pacmodule/completeglass"]').parent().addClass("active"); 

Вы могли бы хотеть проверить это, fiddle

Смежные вопросы