2017-04-03 16 views
-2

は基本的に私は木である、いくつかのHTMLコードを持って、私はそれのためにノードリストを横断したと、彼らは子供を持っている場合、ノードに特定のclassesを割り当て、ここに抜粋です:ForループとNodelistを併用できますか?

<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です:

ループforループ私が返すのは[object Object]です。これを行うにはどうすればよいですか?

+4

のために必要はありません。スクリプトを遅くし、不要な依存関係を追加するだけです。 – Dai

+1

あなたの質問に答えるには "NodeとForループをNodelistで使うことはできますか?" – Aloso

答えて

2

You don't need jQuery

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()疑似クラスを持っているとして、これはすぐに不要になることに注意してください。

https://developer.mozilla.org/en-US/docs/Web/CSS/:has

:has() CSS擬似クラスは、要素に対するセレクタのある場合を表し:パラメータとして渡された指定された要素の範囲は、少なくとも一つの要素と一致します。 :has()疑似クラスはセレクタリストを引数として取ります。

代わりに、このスタイルルールを考慮すると、別の要素を含むli要素に一致します。 JavaScriptは必要ありません。

li:has(> *) { /* As of early 2017 no browser supports this selector yet! */ 

} 
+1

* "代わりにこのスタイルルールを検討する" *あなたのリンクに従って基本的にブラウザのサポートがゼロになっているので、CSSルールにどのくらい考慮する必要がありますか? –

+0

それはうまくいくはずです、少なくとも私は遠く離れていませんでした。また、CSSの機能は神様のようになります – Amon

+1

@squintこの答えはまだ未来にあります。そして、 ':has()'が仕様に追加されるようになりました。 -証​​明! :D – Dai

-1

あなたは何のためのforループを使用することができますが、あなたのコードが正しくありません... innerHTMLプロパティに子を割り当てると代入互換性はなく、ループの中でそれをやっては、単に '要素になりますチェック 'は複数回割り当てられますが、追加はありません。その後、

あなたはjQueryのを使用している場合は使用します。

$('#check').append(children); 
0

あなたはjQueryのを使用しているので、あなたはあなたが、それは意志、このためのjQueryを必要としないループ

$('li').each(function(index, element){ 
    if($(element).children().length > 0){ 
     $(element).addClass('myClass') 
    } 
}) 
+0

答えがOPの基準を満たしていない:「子供がいる場合、特定のクラスをノードに割り当てる」 – Dai

+0

ありがとう、スニペットを更新しました – santi6291

関連する問題