2017-03-21 14 views
0

ELSEIFが起動していないため、正しい構文を使用しているかどうかわかりません。これは正しい構文ですか、それをテストする最良の方法は何ですか?親ノードに子ノードがないかどうかを確認する方法

<script> 
function OnLoad() { 
     var links = document.getElementById("<%=TreeView1.ClientID %>").getElementsByTagName("a"); 
     for (var i = 0; i < links.length; i++) { 
      links[i].setAttribute("href", "javascript:NodeClick(\"" + links[i].id + "\", \"" + links[i].getAttribute("href") + "\")"); 
     } 
    } 
    window.onload = OnLoad; 
    function NodeClick(id, attribute) { 

     var nodeLink = document.getElementById(id); 

     if (nodeLink.hasChildNodes) 
     { 
      eval(attribute); 
     } 
     else if (nodeLink.hasChildNodes == false) 
     { 
      alert(nodeLink.innerHTML + " clicked"); 
      window.open("../NewFolder/addNewProduct.aspx"); 
     } 
     else 
     { 
      return; 
     } 
    } 
    </script> 

私はそれが動作自体が警告/開いているウィンドウを移動するので、私はこの問題は、この行にあると思われる場合:それは、その後、子ノード0ない場合

else if (nodeLink.hasChildNodes == false) 
+0

あなたはjQueryのを使用することができる場合、あなたは '$( '親のためのセレクタ')行うことができます。子供()。長さ> 0 '。 'else if'を' else'だけで置き換えることができます。または 'undefined'もチェックしていますか? – Arg0n

+0

ありがとう@Arg0n、私は、私が持っているものでそれを実装する方法を確認することができませんでした。 – user2796515

+1

hasChildNodes()はメソッドではありませんか? – semuzaboi

答えて

0
parentNode.children.length; 

たとえば、すべての

console.log(document.getElementById('d1').children.length); //->0 
 
console.log(document.getElementById('d2').children.length); //->3
<div id="d1"></div> 
 
<div id="d2"> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
</div>

+0

私の例に似たものを実装しようとすると、私は使用しました:if(nodeLink.children.length> 0) { eval(属性); } else { alert(nodeLink.innerHTML + "clicked");window.open( "../NewFolder/addNewProduct.aspx"); }、子ノードが存在するかどうかにかかわらずeval(属性)に達します。 – user2796515

+0

あなたの問題は、子長さを見つけることに問題があると言います_親ノードに子がないかどうかを確認するには –

+0

正しいので、子ノードがない場合にのみ新しいウィンドウを開きます。 – user2796515

0

HASCHILDNODESためsyntaxはそれが問題に

なお、hasChiildNodesを解決する必要がある方法に変更するreckonが.I方法であると言うには、()の空白を考慮し、をコメントしています。 MDNドキュメントから

childNodesにも含まれています。テキストノードとコメント。それらをスキップするには、代わりにParentNode.childrenを使用します。

すなわち

if (nodeLink.hasChildNodes()) 
    { 
     eval(attribute); 
    } 
    else if (!nodeLink.hasChildNodes()) 
    { 
     alert(nodeLink.innerHTML + " clicked"); 
     window.open("../NewFolder/addNewProduct.aspx"); 
    } 
    else 
    { 
     return; 
    } 

違い

+0

これを使用してノードは正しく展開されますが、 'else if'は決して起動されません。 – user2796515

+0

奇妙なことに、これはうまくいかず、同じ効果があります:var nodeLink = document.getElementById(id); if(nodeLink.hasChildNodes()) { eval(属性); } else { alert(nodeLink.innerHTML + "clicked");window.open( "../NewFolder/addNewProduct.aspx"); } – user2796515

+0

フェッチしているターゲットがスペースを空白にしていないことを確認してください。これらはchildNodesとみなされます.HTMLElementsだけをチェックしたい場合は、ParentNode.childrenに行くことをお勧めします。更新されたansを確認する – semuzaboi

関連する問題