我正在动态生成li元素。 部分li元素的div为空。 喜欢
<ul class="mybuttons">
<li class="mybutton"><div>kkk</div></li>
<li class="mybutton"><div>llll</div></li>
<li class="mybutton"><div></div></li>
</ul>
我不想在ui上显示第3个li元素项目符号,但想显示其他两个li项目符号。 有什么办法可以解决这个问题?
谢谢 阿米特(Amit)
答案 0 :(得分:2)
您已经说过要创建元素。如果是这样,则只需忽略该li
或在div
为空的情况下将其应用于list-style: none
的类。
如果是在事后这样做,则无需更改结构,添加类等,我想不出一个基于div为空的CSS解决方案(而不是总是第三个项目,我确定这不是问题)。
JavaScript解决方案很简单,但是我不喜欢为此使用JavaScript。
const items = document.querySelectorAll(".mybuttons li");
for (const item of items) {
if (!item.textContent.trim()) {
item.style.listStyle = "none";
}
}
<ul class="mybuttons">
<li class="mybutton"><div>kkk</div></li>
<li class="mybutton"><div>llll</div></li>
<li class="mybutton"><div></div></li>
</ul>
或仅与ES5:
var items = document.querySelectorAll(".mybuttons li");
for (var n = 0; n < items.length; ++n) {
if (!items[n].textContent.trim()) {
items[n].style.listStyle = "none";
}
}
<ul class="mybuttons">
<li class="mybutton"><div>kkk</div></li>
<li class="mybutton"><div>llll</div></li>
<li class="mybutton"><div></div></li>
</ul>
我不应该使用上面的style.listStyle
,我应该完成我在上面第一段中所说的并且使用了一个类:
const items = document.querySelectorAll(".mybuttons li");
for (const item of items) {
if (!item.textContent.trim()) {
item.classList.add("empty");
}
}
.empty {
list-style: none;
}
<ul class="mybuttons">
<li class="mybutton"><div>kkk</div></li>
<li class="mybutton"><div>llll</div></li>
<li class="mybutton"><div></div></li>
</ul>
答案 1 :(得分:0)
使用querySelectorAll
选择所有li
元素,如果forEach
中的文本为空,则在div
循环内删除list style
。
var a=document.querySelectorAll('li');
a.forEach((e)=>{
if(e.childNodes[0].textContent=="")
e.style.listStyle='none';
})
<ul class="mybuttons" >
<li class="mybutton"><div>kkk</div></li>
<li class="mybutton"><div>llll</div></li>
<li class="mybutton"><div></div></li>
<li class="mybutton"><div>erere</div></li>
<li class="mybutton"><div></div></li>
<li class="mybutton"><div>rere</div></li>
</ul>
答案 2 :(得分:0)
使用JS:
{
const init = () => {
const btns = document.querySelectorAll(`.mybutton`);
const allBtns = Array.from(btns);
btns.forEach(btn => {
if(btn.textContent === ''){
btn.style.listStyle = 'none';
}
}
}
init();
}
这可能有效
答案 3 :(得分:-1)
只需检查li元素中的文本并最终将其删除:
let items = document.getElementsByTagName("li");
for (var i = 0; i < items.length; ++i) {
let text = items[i].innerText;
if(!text) items[i].remove();
}
<ul class="mybuttons">
<li class="mybutton"><div>kkk</div></li>
<li class="mybutton"><div>llll</div></li>
<li class="mybutton"><div></div></li>
</ul>
答案 4 :(得分:-4)
是的。使用list-style
属性,并为其分配none
。
<ul class="mybuttons">
<li class="mybutton"><div>kkk</div></li>
<li class="mybutton"><div>llll</div></li>
<li class="mybutton" style="list-style: none;"><div>HHH</div></li>
</ul>