我可以将 For 循环与节点列表一起使用吗?
Can I use a For loop with a Nodelist?
基本上我有一些 HTML 代码是一棵树,我为它遍历了 Nodelist 并分配某些 classes
给节点,如果它们有 children,这是一个片段:
<li id='test' class="parentNode">
<button class="customer-btn button"><a href='#'>Customer 6</a></button>
<ul>
<li>
<a href='#'>Customer A</a>
</li>
</ul>
</li>
<li class="parentNode">
<button class="customer-btn button"><a href='#'>Customer 7</a></button>
<ul>
<li>
<a href='#'> Customer A</a>
</li>
</ul>
</li>
这是我的 Javascript:
parent_list = document.getElementsByTagName("LI");
var i;
$(document).ready(function() {
for (i=0; i < parent_list.length; i++){
children = $(i).find('LI');
document.getElementById('check').innerHTML = children;
}
});
for
循环我有 return [object Object]
,最好怎么做?
window.addEventListener('DOMContentLoaded', run );
function run() {
var allLIElements = document.getElementsByTagName('LI');
for( var i = 0; i < allLIElements.length; i++ ) {
var li = allLIElements[i];
if( li.firstElementChild != null ) {
li.classList.add('hasChildren');
}
}
}
请注意,这很快就没有必要了,因为 CSS 提出了 :has()
伪 class,您可以将其用于 select 满足某些条件的元素。
https://developer.mozilla.org/en-US/docs/Web/CSS/:has
The :has()
CSS pseudo-class represents an element if any of the selectors, relative to the:scope of the given element, passed as parameters, matches at least one element. The :has()
pseudo-class takes a selector list as an argument.
改为考虑此样式规则,它将匹配包含另一个元素的任何 li
元素。不需要 JavaScript。
li:has(> *) { /* As of early 2017 no browser supports this selector yet! */
}
您可以对任何内容使用 for 循环,但您的代码不正确...将子项分配给 innerHTML 不是兼容的分配,在循环中执行它只会导致元素 'check' 被分配多次,而不是加法。
如果您使用 jQuery 则使用:
$('#check').append(children);
由于您使用的是 jQuery,因此不需要 for 循环
$('li').each(function(index, element){
if($(element).children().length > 0){
$(element).addClass('myClass')
}
})
基本上我有一些 HTML 代码是一棵树,我为它遍历了 Nodelist 并分配某些 classes
给节点,如果它们有 children,这是一个片段:
<li id='test' class="parentNode">
<button class="customer-btn button"><a href='#'>Customer 6</a></button>
<ul>
<li>
<a href='#'>Customer A</a>
</li>
</ul>
</li>
<li class="parentNode">
<button class="customer-btn button"><a href='#'>Customer 7</a></button>
<ul>
<li>
<a href='#'> Customer A</a>
</li>
</ul>
</li>
这是我的 Javascript:
parent_list = document.getElementsByTagName("LI");
var i;
$(document).ready(function() {
for (i=0; i < parent_list.length; i++){
children = $(i).find('LI');
document.getElementById('check').innerHTML = children;
}
});
for
循环我有 return [object Object]
,最好怎么做?
window.addEventListener('DOMContentLoaded', run );
function run() {
var allLIElements = document.getElementsByTagName('LI');
for( var i = 0; i < allLIElements.length; i++ ) {
var li = allLIElements[i];
if( li.firstElementChild != null ) {
li.classList.add('hasChildren');
}
}
}
请注意,这很快就没有必要了,因为 CSS 提出了 :has()
伪 class,您可以将其用于 select 满足某些条件的元素。
https://developer.mozilla.org/en-US/docs/Web/CSS/:has
The
:has()
CSS pseudo-class represents an element if any of the selectors, relative to the:scope of the given element, passed as parameters, matches at least one element. The:has()
pseudo-class takes a selector list as an argument.
改为考虑此样式规则,它将匹配包含另一个元素的任何 li
元素。不需要 JavaScript。
li:has(> *) { /* As of early 2017 no browser supports this selector yet! */
}
您可以对任何内容使用 for 循环,但您的代码不正确...将子项分配给 innerHTML 不是兼容的分配,在循环中执行它只会导致元素 'check' 被分配多次,而不是加法。
如果您使用 jQuery 则使用:
$('#check').append(children);
由于您使用的是 jQuery,因此不需要 for 循环
$('li').each(function(index, element){
if($(element).children().length > 0){
$(element).addClass('myClass')
}
})