2017-05-16 5 views
-3

が入っていないので、平均給与のより大きな給与を得て、その人の名前を印刷する必要がありますが、少なくとも私には届かないif警告がそうです。ここに私のコードです:if文にjavascript DOM

<html> 

<body> 
    <script type="text/javascript"> 
     xDOC = new ActiveXObject("Microsoft.XMLDOM"); 

     xDOC.async = "false"; 
     xDOC.load("pti_project.xml"); 
     x = xDOC.getElementsByTagName("person"); 
     alert(x.length); 
     var avgsal = 11450/x.length; 
     for (var i = 0; i < x.length; i++) { 
      var salary = x[i].getElementsByTagName("salary"); 
      if (salary * 1 > avgsal * 1) { 
       alert("1"); 
       var person = x[i].getElementsByTagName("name"); 
       document.write(person[0].childNodes[0].nodeValue); 
      } 
     } 
     document.write(avgsal); 
    </script> 
</body> 

</html> 

これはなぜ起こるか、それは動作するはずです。

+0

ヒント、コンソールに 'salary'を記録してみてください。それが正しい値を保持していることを確認してください – Rajesh

+0

@Rajeshありがとう、それは値を保持しません。 –

+0

喜んで私は助けることができました!あなたはヒントを与え、答えない理由があることを願っています。 :-) – Rajesh

答えて

0

名前が示す通り、メソッドgetElementsByTagName()は、オブジェクトの値ではなく、オブジェクトのコレクションを返します。 このページの例を見てください。https://msdn.microsoft.com/en-us/library/ms765549(v=vs.85).aspx 関数の結果はforのループで反復され、一致する各要素を取得してからxmlプロパティが出力されます。以下のような 何か:

(salary.length > 0 ? parseFloat(salary.item(0).xml) : 0) 

だけ salaryするのではなく、あなたのために働くだろう。 この式は、コレクションが空でないかどうかをチェックし、コレクションが空でなければ最初の要素の内容を取得します。それ以外の場合はゼロが返されます。

+0

アドバイスをいただきありがとうございます。 –

0

ここに私の質問に対する私の答えは少し時間が必要でしたが、私はそれを作ったのです。だから、誰かがこのような状況で助けを必要とするならば、コードはここにあります:

<html> 
<body> 
<script type="text/javascript"> 
xDOC=new ActiveXObject("Microsoft.XMLDOM"); 

xDOC.async="false"; 
xDOC.load("pti_project.xml"); 
x=xDOC.getElementsByTagName("person"); 
var avgsal = 11450/x.length; 
for(var i=0; i<x.length; i++) 
{ 
var salary=x[i].getElementsByTagName("salary"); 
if(salary[0].childNodes[0].nodeValue>avgsal*1) 
{ 
var person=x[i].getElementsByTagName("name"); 
document.write(person[0].childNodes[0].nodeValue); 
document.write("<br>"); 
} 
} 
</script> 
</body> 
</html>