2012-07-20 5 views
6

三項演算子を使用してXML要素の値がnullかどうかを確認しようとしています。もしそうなら、変数を一つのものにしたい。そうでなければ、要素の値を返すことを望みます。これは私がこれまで持っていたものです。ここで三項演算子を使用して変数を設定する

var rating = data.getElementsByTagName("overall_average")[0].childeNodes[0].length > 0 ? data.getElementsByTagName("overall_average")[0].childeNodes[0].nodeValue : "It is empty"; 

答えて

5

最短の方法:

var rating = (data.getElementsByTagName('overall_average')[0].childNodes[0] || {}).nodeValue || 'It is empty'; 
+0

説明してください? – mplungjan

+0

@mplungjan、私は私の例ではnullをチェックするために '||'演算子を使用しました。だから、もしあなたがこのようなものを持っていれば、 'var x = null || {}; 'xは' null'の代わりに空の 'object'になります。プロパティに '||'を使うこともできます: 'var x = {} .someProp || 'hello'; '、xは' 'hello''になります。 –

+0

ありがとう!この同じ変数が三項演算子の数値であるかどうかをどのようにチェックするのか説明できますか? –

11

:このコードは場合(エラー)をスローしますが、必要であれば、その場合警戒する場合がありますので、シングル「overall_average」要素は、dataに存在しないことを

var node = data.getElementsByTagName('overall_average')[0].childNodes[0]; 
var rating = node ? node.nodeValue : 'It is empty'; 

注意...

+0

それは定格の値としてNaNのをスローし続けています。 –

+0

なぜそれがそれをするのかわかりません。我々は単にノードを参照して、そのnodeValueにアクセスしています。私はブレークポイントを設定し、 'node'が実際にNodeリファレンスであるかどうかを確認することをお勧めします... –

+0

ありがとう。私はちょうどそれをやった。評価変数を丸めようとしていたプラグインがありました。私のコードを匿名関数に移動し、そのトリックを行いました。しかし、将来の参照のために、変数が数値かどうかをチェックし、その結果に基づいて何かを吐き出す方法を知っていますか?私は再びそれが三元演算子にあることを好むでしょう。 –

1

あなたの三項演算は、私によく見えます。私が(可読性と簡潔さのために)提案することの1つは、overall_averageオブジェクトを変数として定義し、それを参照することです。

var overall_average = data.getElementsByTagName("overall_average")[0].childeNodes[0]; 
var rating = overall_average.length > 0 ? overall_average.nodeValue : "It is empty"; 

幸運を祈る!

+0

ありがとうございます。これは理にかなっていますが、私が設定しようとしている変数あたり2行になる要素のリストを実行しているという意味です。 –