Одним из способов удаления пробела между элементами списка при использовании inline-block
является изменение этого кода:
ul{
width: 100%;
padding: 0;
margin: 0;
}
li{
display: inline-block;
background: #E43;
color: white;
padding: 10px 20px 10px 20px;
}
li:hover{
background: #F65;
border-bottom: 2px solid dodgerblue;
}
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
к этому коду:
ul{
width: 100%;
padding: 0;
margin: 0;
}
li{
display: inline-block;
background: #E43;
color: white;
padding: 10px 20px 10px 20px;
}
li:hover{
background: #F65;
border-bottom: 2px solid dodgerblue;
}
<ul><li>
Item 1</li><li>
Item 2</li><li>
Item 3</li>
</ul>
который отлично работает.
Вопрос в том, как изменить структуру li
первого кода на структуру второго кода, используя Javascript чистый.
Вы можете сделать что-то вроде этого:
const ul = document.querySelector('ul');
const iterator = document.createNodeIterator(ul, NodeFilter.SHOW_TEXT, node => {
if (node.parentElement.nodeName === 'UL') {
return NodeFilter.FILTER_ACCEPT;
}
return NodeFilter.FILTER_REJECT;
});
const toBeRemoved = [];
let next = iterator.nextNode();
while(next) {
toBeRemoved.push(next);
next = iterator.nextNode();
}
toBeRemoved.forEach(n => n.remove());
ul{
width: 100%;
padding: 0;
margin: 0;
}
li{
display: inline-block;
background: #E43;
color: white;
padding: 10px 20px 10px 20px;
}
li:hover{
background: #F65;
border-bottom: 2px solid dodgerblue;
}
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
Что это делает, так это создает NodeIterator
для перебора всех text
узлов элемента UL
и сохраняет только те узлы, у которых UL
является их первым предком.
Совершенный и расширяемый. Спасибо.