このフィドル http://jsfiddle.net/mjmitche/6nar4/3/ で、たとえば、小さな青いボックスを黄色のボックスにドラッグすると、大きな黒いボックスがピンクに変わります。左側にある4つのボックスはすべて、ブラックボックス内のボックスにドラッグできます。
フィドルの終わりに、ブラックボックスをピンクに変更するコードが表示されます。
しかし、それを三項演算子にしたいので、ボックスが黒の場合はピンクになりますが、ピンクになった場合は黒に戻ります。
私は三項がこのようであることを知っています
x ? y: z
だから私はこれを試しました
$("#blackbox").css({'background':'pink'}); ?
$("#blackbox").css({'background':'black'}); :
$("#blackbox").css({'background':'pink'});
疑問符の前の最初の行が問題を引き起こしていると思うので、if
ステートメントを作成する方法は?
私はそのようなコードで行くだろう:
var oBox = $("#blackbox");
var curClass = oBox.attr("class");
var newClass = (curClass == "bg_black") ? "bg_pink" : "bg_black";
oBox.removeClass().addClass(newClass);
動作させるには、まずCSSを変更し、#blackbox
宣言からbackground
を削除し、これらの2つのクラスを追加する必要があります。
.bg_black { background-color: #000; }
.bg_pink { background-color: pink; }
そして、最初にクラスbg_black
をblackbox
要素に割り当てます。
更新されたjsFiddle: http://jsfiddle.net/6nar4/17/
私の意見では、他の回答よりも読みやすいですが、もちろん選択するのはあなた次第です。
ダンとニコラは適切な修正コードを持っていると思いますが、元のコードが機能しなかった理由がはっきりしないかもしれません。
ここで「三項演算子」と呼ばれているものは、ECMA-262セクション11.12では条件演算子と呼ばれます。形式は次のとおりです。
LogicalORExpression ? AssignmentExpression : AssignmentExpression
LogicalORExpressionが評価され、戻り値が(if条件の式のように)ブール値に変換されます。 trueと評価された場合、最初のAssignmentExpressionが評価されて戻り値が返され、そうでない場合は2番目が評価されて返されます。
元のコードのエラーは、試行された条件演算子を構文エラーのある一連のステートメントに変更する余分なセミコロンです。
私がしたい(キャッシュを追加した):
_var bbx = $("#blackbox");
bbx.css('background-color') === 'rgb(255, 192, 203)' ? bbx.css('background','black') : bbx.css('background','pink')
_
wroking fiddle(new AGAIN): http://jsfiddle.net/6nar4/37/
css()
が色のRGB値を返すため、最初の演算子を変更する必要がありました
三項演算子は、ブール式に疑問符が続き、さらにコロンで区切られた2つの式として記述されます。
あなたが間違っていることが最初にわかるのは、最初の式がブール値やブール値に変換できる適切なものを返していないことです。最初の式は常に、ブール値としての理にかなった解釈を持たないjQueryオブジェクトを返しますが、変換後の変換はおそらく不変の解釈になります。読みやすくするために、他の人に害がなければ、よく知られているブール値の解釈を持つものを返すことをお勧めします。
2つ目は、各式の後に間違っているセミコロンを入れていることです。実際には、これは「構成の終わり」と言っているため、三項演算子を壊しています。
ただし、この状況では、おそらくこれをより簡単に行うことができます。クラスとtoggleClassメソッドを使用すると、簡単にクラスのオンとオフを切り替えることができ、そのクラス定義にスタイルを入れることができます(コメントでクラスの使用を提案する@yoavmatchulskyに称賛)。
このフィドルはここにあります: http://jsfiddle.net/chrisvenus/wSMnV/ (元に基づいて)
三項演算子は、最初の部分がブール値を返すため機能します。あなたの場合、jQueryのcssメソッドはjQueryオブジェクトを返すため、3項演算には無効です。
あなたがやろうとしているように見えることから、 toggle はあなたの問題をより良く解決するかもしれません。
編集:申し訳ありませんが、トグルは単なる可視性であり、あなたの背景色の切り替えに役立つとは思わない。
しかし、ここに行きます:
var box = $("#blackbox");
box.css('background') == 'pink' ? box.css({'background':'black'}) : box.css({'background':'pink'});
以下は、関数の側面の実際の例です。
_function setCurrency(){
var returnCurrent;
$("#RequestCurrencyType").is(":checked") === true ? returnCurrent = 'Dollar': returnCurrent = 'Euro';
return returnCurrent;
}
_
あなたの場合。セレクターと戻り値を変更する
$("#blackbox").css('background-color') === 'pink' ? return "black" : return "pink";
最後に、ブラウザで使用される値が何であるかを知るには、コンソールで次を実行します。
$("#blackbox").css('background-color')
そして、色の選択に16進数の代わりに「rgb(xxx.xxx.xxx)」値を使用します。
また、三項演算子はステートメントではなく式を想定しています。三項演算子の最後でのみセミコロンを使用しないでください。
$("#blackbox").css({'background':
$("#blackbox").css('background') === 'pink' ? 'black' : 'pink'});
他の人が正しく指摘しているように、三項の最初の部分はtrue
またはfalse
を返す必要があり、質問では戻り値はjQueryオブジェクトです。
比較で発生する可能性のある問題は、 ウェブの色 がRGBに変換されるため、3項の条件でそれをテキスト化する必要があることです。
CSSの場合:
#blackbox {
background:pink;
width:10px;
height:10px;
}
次のjQueryは色を反転します。
var b = $('#blackbox');
b.css('background', (b.css('backgroundColor') === 'rgb(255, 192, 203)' ? 'black' : 'pink'));