#jquery
#jquery
Вопрос:
Учитывая следующую структуру:
<ul>
<li><a href="example.com>1</a></li>
<li><a href="example.com>2</a></li>
<li><a href="example.com>3</a>
<ul>
<li><a href="example.com">3.1</a></li>
<li><a href="example.com">3.2</a>
<ul>
<li><a href="example.com">3.2.1</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="example.com>4</a></li>
</ul>
Я бы хотел автоматически удалить или отключить ссылку для 3
и 3.2
В принципе, любой li, у которого есть дочерние элементы, ссылка должна быть удалена. Каков наилучший способ сделать это?
Ответ №1:
Если вы не хотите сохранять текст:
$('li:has(ul) > a').remove();
Если вы хотите сохранить текст, вы могли бы использовать .replaceWith
:
$('li:has(ul) > a').replaceWith(function() {
return $(this).text();
});
Комментарии:
1. Я новичок, что было бы что-то подобное, просто не мог сам до этого додуматься, но что, если он захочет сохранить текст в ссылке?
2. @kylex: Вы могли бы рассмотреть возможность замены его другим элементом DOM вместо только их контекста, чтобы вам было проще снова обернуть их в ссылки. Но это зависит от вашего варианта использования. Пожалуйста 🙂
Ответ №2:
Даже если бы я не тестировал, это должно сработать:
$('li').filter(function(){ return $('ul', this).length ? this : ''; }).find('a:first').unwrap('<a></a>')
Ответ №3:
$("a").click(function(e){
if( $(this).parent().children('ul').length > 0 ){
e.preventDefault(); //prevent the link from being followed
$(this).remove(); //remove the a element
}
});
Ответ №4:
использование jQuery,
$('li > a').each(function() {
if ($(this).siblings().length)
$(this).remove();
});
Ответ №5:
$('ul li > ul').parent().children("a").attr("href","#")