2012-09-01 5 views
0

Я хочу скрыть <li> тег на <a> тег click с jQuery.jQuery onclick скрыть свой родительский элемент

<ul> 
    <li> 
    <a href="'>Something</a> 
    </li> 
    <li> 
    <a href="'>Something</a> 
    </li> 
    <li> 
    <a href="'>Something</a> 
    </li> 
</ul> 

Другими словами, если кто-то нажимает на ссылку (<a></a>) его родитель <li> получает скрыт.

+0

Интересно, что существует около 5 ответов, а на одном используется jQuery «on»? – Moons

ответ

4

Обработайте событие .click, а затем используйте методы .parent и .hide.

$("a").click(function(){ 
    $(this).parent().hide(); // this is the link element that was clicked 
}) 

Код выше предполагает, что ссылка содержится непосредственно в элементе списка (<li>). Если это не так, вы можете передать селектор в .parent метод как это:

$(this).parent("li").hide(); 

Найдет пройти через предок вашей ссылки и вернуть тот, который является <li>.

Возвращение ложных

Обычно, когда вы щелкните <a> тег, браузер будет перемещаться к HREF тега. Если вы не хотите, чтобы вы могли либо return false; из обработчика кликов, либо добавить href, который возвращает false: <a href="javascript:void(0)">Link</a>. Об этом больше обсуждают in this question.

Есть много различных способов сделать это

Вам может потребоваться изменения кода, так как:

  • Вы, вероятно, есть другие ссылки на страницы, которые вы не хотите, чтобы скрыть родитель. Вот почему имеет смысл использовать «ul li a» в качестве селектора вместо «a» - он будет соответствовать только ссылкам, находящимся внутри списка.
  • Вы можете использовать объект события .preventDefault() вместо того, чтобы возвращать false чтобы браузер не менял адрес
  • Поскольку ссылка будет скрыта после нажатия, вы также можете использовать метод .one - он удалит обработчик событий после того, как была нажата ссылка. Не делайте этого, если вы планируете снова показать ссылку позже.
  • Вы можете использовать .on вместо .click если ваш список является динамическим, то есть вы будете использовать JavaScript, чтобы добавить ссылки на него
  • Некоторые обернули отвечающий код в то, что называется сама-вызовом функция. Это выглядит так: (function() { /* code */})(jQuery);. Я бы не рекомендовал это для новичков, хотя это поможет вам структурировать ваш код позже. В основном это помогает избежать нежелательных побочных эффектов в коде и позволяет использовать .noConflict.
1

Попробуйте это, спрятав родителей li и предотвращая действие по умолчанию нажатия на гиперссылку.См http://api.jquery.com/event.preventDefault/:

$(function() { 
    $("a").click(function(e) { 
     e.preventDefault(); 
     $(this).parent().hide(); 
    }); 
}); 
0
$('a').click(function(){ 
    $(this).parent('li').hide(); 
}); 
1

Вы можете использовать .parent() целевой родительского элемента, и .hide(), чтобы скрыть его. Подробнее об использовании этих функций см. В документации jQuery. Вы также должны использовать .preventDefault(), чтобы браузер не следил за ссылкой.

$(function() { 
    $('a').click(function(e) { 
     e.preventDefault(); 
     $(this).parent().hide(); 
    }); 
}); 
1

не забудьте использовать return false;

$('a').click(function(){ 
     $(this).parent().hide(); 
     return false; 
    });​ 

Live Demo

6
(function() { 
    $("ul li a").click(function(e) { 
    e.preventDefault(); 
    $(this).parent().hide(); 
    }); 
})(jQuery); 

также попробовать "один" функцию JQuery

(function() { 
    $("ul li a").one('click', function(e) { 
    e.preventDefault(); 
    $(this).parent().hide(); 
    }); 
})(jQuery); 
+3

@MarianZburela +1 для использования «одного», о котором я никогда не слышал – Moons

+1

хороший пример одной функции, я буду помнить ее для будущего использования –

+0

спасибо, я рад, что мы все узнаем что-то новое или что-то лучше –

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