如何删除带有特定文本的 li?
How do you remove an li with specific text?
感谢您花时间阅读本文。
我需要删除包含“登录”的列表项。问题是一旦登录列表项就会发生变化,我无法按照它们在列表中显示的顺序删除它们。我也不能只删除 html 或给任何列表项附加 ID 或 类。我可以添加 css 和 javascript 尽管这确实与页面交互。
有没有办法只删除 li 和 anchor 标签中包含“登录”的列表项?
<ul class="nav navbar-nav" id="navLinks">
<li class="list-group-item">
<a href="/">Home</a>
</li>
<li class="list-group-item">
<a href="/postings/search">Search</a>
</li>
<li class="list-group-item">
<a href="/user/new">Create Account</a>
</li>
<li class="list-group-item">
<a href="/login">Log In</a>
</li>
<li class="list-group-item">
<a href="/help">Help</a>
</li>
</ul>
如果登录项总是第四个,可以通过添加下一个js来实现:
document.querySelectorAll('.list-group-item')[3].remove()
这不需要与用户交互,您可以将其添加到您想要的任何功能中。
我假设您希望在用户未登录时显示登录元素,如果登录了则隐藏它。由于您可以控制 CSS,因此添加一个帮助程序 class .hide
将显示 属性 设置为 display: none;
。
然后当你有一个用户登录时,你 运行 在 JS 中有条件地检查 list-items[=40 的 textContent
=] (children[0]),这将是 a
标签。检查 userLoggin 状态,如果两者都 natch 添加 class。我还将 let userLoggedIn = true;
作为参数添加到函数中以检查这是否也是 true 或不允许您根据用户是否登录来控制是否添加 class。
您可以使用 document.querySelectorAll('#navLinks .list-group-item');
查询 list-group-item
,然后遍历 nodeList 并使用条件搜索 textContent
使用 item.children[0].textContent === 'Log In'
的第一个子项 textContent
,如果此条件 returns true 然后 用户登录 添加一个 css class 来隐藏元素。
const listItems = document.querySelectorAll('#navLinks .list-group-item')
const listItems2 = document.querySelectorAll('#navLinks2 .list-group-item')
function hideItem(el, bool) {
el.forEach(item =>
item.children[0].textContent === 'Log In' && bool === true ?
item.classList.add('hide') :
item.classList.remove('hide')
)
}
let userLoggedIn = true
let userLoggedIn2 = false
hideItem(listItems, userLoggedIn)
hideItem(listItems2, userLoggedIn2)
.hide {
display: none;
}
<h2>user is logged in</h2>
<ul class="nav navbar-nav" id="navLinks">
<li class="list-group-item">
<a href="/">Home</a>
</li>
<li class="list-group-item">
<a href="/postings/search">Search</a>
</li>
<li class="list-group-item">
<a href="/user/new">Create Account</a>
</li>
<li class="list-group-item">
<a href="/login">Log In</a>
</li>
<li class="list-group-item">
<a href="/help">Help</a>
</li>
</ul>
<h2>user is NOT logged in</h2>
<ul class="nav navbar-nav" id="navLinks2">
<li class="list-group-item">
<a href="/">Home</a>
</li>
<li class="list-group-item">
<a href="/postings/search">Search</a>
</li>
<li class="list-group-item">
<a href="/user/new">Create Account</a>
</li>
<li class="list-group-item">
<a href="/login">Log In</a>
</li>
<li class="list-group-item">
<a href="/help">Help</a>
</li>
</ul>
感谢您花时间阅读本文。
我需要删除包含“登录”的列表项。问题是一旦登录列表项就会发生变化,我无法按照它们在列表中显示的顺序删除它们。我也不能只删除 html 或给任何列表项附加 ID 或 类。我可以添加 css 和 javascript 尽管这确实与页面交互。
有没有办法只删除 li 和 anchor 标签中包含“登录”的列表项?
<ul class="nav navbar-nav" id="navLinks">
<li class="list-group-item">
<a href="/">Home</a>
</li>
<li class="list-group-item">
<a href="/postings/search">Search</a>
</li>
<li class="list-group-item">
<a href="/user/new">Create Account</a>
</li>
<li class="list-group-item">
<a href="/login">Log In</a>
</li>
<li class="list-group-item">
<a href="/help">Help</a>
</li>
</ul>
如果登录项总是第四个,可以通过添加下一个js来实现:
document.querySelectorAll('.list-group-item')[3].remove()
这不需要与用户交互,您可以将其添加到您想要的任何功能中。
我假设您希望在用户未登录时显示登录元素,如果登录了则隐藏它。由于您可以控制 CSS,因此添加一个帮助程序 class .hide
将显示 属性 设置为 display: none;
。
然后当你有一个用户登录时,你 运行 在 JS 中有条件地检查 list-items[=40 的 textContent
=] (children[0]),这将是 a
标签。检查 userLoggin 状态,如果两者都 natch 添加 class。我还将 let userLoggedIn = true;
作为参数添加到函数中以检查这是否也是 true 或不允许您根据用户是否登录来控制是否添加 class。
您可以使用 document.querySelectorAll('#navLinks .list-group-item');
查询 list-group-item
,然后遍历 nodeList 并使用条件搜索 textContent
使用 item.children[0].textContent === 'Log In'
的第一个子项 textContent
,如果此条件 returns true 然后 用户登录 添加一个 css class 来隐藏元素。
const listItems = document.querySelectorAll('#navLinks .list-group-item')
const listItems2 = document.querySelectorAll('#navLinks2 .list-group-item')
function hideItem(el, bool) {
el.forEach(item =>
item.children[0].textContent === 'Log In' && bool === true ?
item.classList.add('hide') :
item.classList.remove('hide')
)
}
let userLoggedIn = true
let userLoggedIn2 = false
hideItem(listItems, userLoggedIn)
hideItem(listItems2, userLoggedIn2)
.hide {
display: none;
}
<h2>user is logged in</h2>
<ul class="nav navbar-nav" id="navLinks">
<li class="list-group-item">
<a href="/">Home</a>
</li>
<li class="list-group-item">
<a href="/postings/search">Search</a>
</li>
<li class="list-group-item">
<a href="/user/new">Create Account</a>
</li>
<li class="list-group-item">
<a href="/login">Log In</a>
</li>
<li class="list-group-item">
<a href="/help">Help</a>
</li>
</ul>
<h2>user is NOT logged in</h2>
<ul class="nav navbar-nav" id="navLinks2">
<li class="list-group-item">
<a href="/">Home</a>
</li>
<li class="list-group-item">
<a href="/postings/search">Search</a>
</li>
<li class="list-group-item">
<a href="/user/new">Create Account</a>
</li>
<li class="list-group-item">
<a href="/login">Log In</a>
</li>
<li class="list-group-item">
<a href="/help">Help</a>
</li>
</ul>