折り畳み表示をするには?(IE5)

[上に] [前に] [次に]
きぃ坊 [E-Mail] 2000/03/15(水) 12:40:21
はじめまして、きぃ坊と申します。

DHTMLについて質問です。
本を読んだ所、折り畳み表示をする方法が書いてありました。
ここでの折り畳み表示とは、
マウスを合わせると隠れた説明文が特定の場所に表示されると言う意味です。
本に書いてある通りに、タグを打ち込んでも何故かエラーが出ます。
私自身、まだDHTMLの知識が乏しく、どこがおかしいのか分かりません。
下にタグを記しますが、間違っている場合は訂正を、
そのほかの方法で同様の表記ができる場合はその方法を教えていただけるとありがたいです。

以上、よろしくお願いします。

<A href=# onClick="new.style.display='none'==new.style.display?":'none'">更新履歴</A>
<P ID="new" STYLE="display:none">TOPページのレイアウトを刷新しました</P>

無責任官庁 2000/03/15(水) 13:28:55
とりあえず指摘は2点。

1点目。
“new”は、予約語なので使用できません。
もっとオリジナリティのある名称にしましょう。

2点目。
二項演算子を使用していますが、どこまでが代入式でどこが演算子
なのか、パっと見で区別できませんでした(^-^;
演算部分には“()”を付けて見やすくするといいでしょう。
そうすると、“?”の後ろのダブルクォーテーションが、
実はシングル二つだという事が分かります。

以上の事を考慮して修正したのがこちら。

<A href="#" onClick="whatsnew.style.display=('none'==whatsnew.style.display)?'':'none';return false;">更新履歴</A>
<P ID="whatsnew" STYLE="display:none">TOPページのレイアウトを刷新しました</P>

フシギバナ 2000/03/15(水) 13:40:07
無責任官庁さんへ 以下がよくわかりません。
(特に、? のあとの ''。ついでに、return falseと true の違い)

〜〜display)?'':'none;return false;

よろしくお願いします。

無責任官庁 2000/03/15(水) 13:57:41
えーと。二項演算子ってやつですね。
条件が真ならば、“:”の左、偽ならば右を代入の値とします。
A = (条件)?B:C
は、
if(条件){
A=B;
}else{
A=C;
}
と同じ意味を持ちます。
ですからここの部分、
whatsnew.style.display=('none'==whatsnew.style.display)?'':'none'
これは、whatsnew.style.display の値が'none'であれば、''(空文字)
を代入、'none'じゃなければ'none'を代入、となります。

あとreturn falseですが、クリックする場所に<A href="#">を使ってますよね。
普通にこれをやると、ページの先頭に位置づけしたりするブラウザが
あると思います。(<A>の機能として処理を行っている為)
ところが今回は利用方法の意味が違いますよね。
ですから、<A> の機能を殺す意味で return false を入れます。
true の場合は、<A>の機能も行うので、URLが書いてあれば、
スクリプト処理後にジャンプします。
return false ならジャンプしません。

フシギバナ 2000/03/15(水) 14:23:50
だいたい、理解できました。
ありがとうございました。

''(空文字)が代入されるとなぜ表示されるのですか?
空文字はblockと等価ですか?

またまた、よろしくお願いします。

Fuji.♪ [E-Mail] [HomePage] 2000/03/15(水) 14:33:38
無責任官庁さん:
A ? B : C の構文は、三項演算子ではないですか? (^^;

無責任官庁 2000/03/15(水) 15:18:22
> ''(空文字)が代入されるとなぜ表示されるのですか?

私はスタイルシートに関しては無知なのでアレですけど…
displayプロパティが空文字=なにも指定しないのと同じ=普通のHTML状態
だから表示する、という事だと思います(根拠なし)。
block と等価かどうか…は、私には分かりません。

#HTML に精通してるワケじゃないんで、ブロック要素に含まれない
#HTML 要素があるのかも…とか、思っちゃったりしてるんで。

> 三項演算子ではないですか?

えーと。二項演算って、「二つの項での演算」っていう意味だと思うんです。
(でもこの場合、ひょっとしたら二つの解しか無い…という意味かも)

単純に“A * B”と書いても、これは二項演算ですよね。
そこに“= C”と書いても、三項演算にはならないと思います。
というわけで、B と C は、演算項では無く解?なワケで。
A,B,C があるから三項…というシロモノでは無いんじゃないかな〜と。

#なんか違うこと言ってるかもしれない…
#まともに高校出てない私には、キビシイ突っ込みだ…(^-^;;

無責任官庁 2000/03/15(水) 15:20:42
> というわけで、B と C は、演算項では無く解?なワケで。
これは、A ? B : C の場合は、ですね。
けして A * B = C の話じゃありません(^-^;;

たれ 2000/03/15(水) 15:28:35
>> 三項演算子ではないですか?
>
>えーと。二項演算って、「二つの項での演算」っていう意味だと思うんです。

それでいいと思います。
sizeofとか否定(!)なんかは単項演算子です。


>というわけで、B と C は、演算項では無く解?なワケで。
>A,B,C があるから三項…というシロモノでは無いんじゃないかな〜と。

自信がなかくなってきたので久々に入門書広げてみましたが、やはり
「三項演算子」とありました。(C言語辞典だと条件演算子とのこと)
演算する対象(候補)が三つあるからかな?

Fuji.♪ [E-Mail] [HomePage] 2000/03/15(水) 15:53:08
whatsnew.style.displayに''を代入することで、スタイルシートの初期値が利用されるのではないでしょうか。
とりあえず適当にW3Cをうろついてみた結果としては初期値の inline が適用されている気がします。

で、三項演算子についてです。
A ? B : C の時、分解して考えた場合はBとCはそれぞれ返される値として見る事ができますが、あくまで A ? B : C というのは3つの項目が ?: 演算子によって接続された一つの式です。
ですから、三項演算子と呼びます。(私の解釈では (^^;)

なお、詳しくはC言語やJavaScriptの文法書を参考のしてください。gooやInfoSeekなどで「三項演算子」をキーにして検索しても見つかるはずです。

C、C++、JavaScriptなどでは三項演算子ときっちり規定されている演算子なんです。 (^_^;> ?: 演算子

無責任官庁 2000/03/15(水) 16:09:01
話がどんどんズレてる感じがするんでアレですけど…

>三項演算子ときっちり規定されている演算子なんです
了解しました。
ちゃんとした規定を読まずにここまできてしまいましたので…
人に教えるときは、ちゃんと根拠に基づいた話をしないとダメですね。
失礼しました。

#実はとほほさんのリファレンスだけでやってきてたりして(^-^;
#旧・とほほのJavaScriptリファレンスには「二項演算子」で載ってる
#んですよね。(手元にある 99/11/21 版を参照してます)
#それ、そのまま信じておぼえてました。
#今は「条件演算子」に改定されてますけど。(^-^;;

きぃ坊 [E-Mail] 2000/03/15(水) 17:47:26
[[解決]]
ありがとうございました。
理屈はよく分かりませんが、思う様に表示できました。

[上に] [前に] [次に]