ie=!!document.allというように!を2回重ねることにどういう意味があるのでしょうか?
やっぱりie=document.allとは違うんですかね?
すみません、簡単なんですがよろしくおねがいします。

A 回答 (4件)

C言語では、論理演算の結果は整数の 1 か 0 しかとりませんので、


0以外なら1、0なら0となるような結果を得たいときに !! を使うこ
とがあります(可読性が下がるのであまりおすすめされませんが)。

JavaScript でこれをするということは、true に相当する値(つま
り、0 に相当しないなんらかの値をもっている)なら true そのも
の、0 に相当する値なら false そのものを得たいということでしょ
う。

document.all というのは IE4 以降の拡張機能だそうですので、そ
れ以前のものでは document.all の値は false 相当になります。
つまり、これに !! をつけることで、IE4 以降なら true、そうで
なければ false となるという判断材料にしていると思われます。
変数名の ie もそういう意図でしょう。

しかし、他のブラウザでそういう拡張がないという保証はないので、
ブラウザの種別の判断としてはいい方法とは思えませんけどね。
document.all の機能の有無を知りたいのであれば、正しい方法だ
と思います。
    • good
    • 0
この回答へのお礼

ありがとうございます!

IE4以上であれば
ie=document.allはieの中にオブジェクトが入る
ie=!!document.allはieの中にtrueが入るということでいいんでしょうかね?

む、むずかしい・・・・

お礼日時:2001/02/07 10:26

punchan_jpさんへ



すみません。よく読めば確かにさんのおっしゃっているように受け取ることができます。不慣れなのか、読解力が乏しいのか、申し訳なく思います。


katsudonさん、punchan_jpさんへ

ご迷惑をおかけしました。お詫び申し上げます。
    • good
    • 0

antigen さん、



えっと、議論するつもりはないんですが、document.all が論理値
でないことは知っています。私の回答からは読みとれなかったでしょ
うか? katsudon さんには伝わったようなので、安心していたので
すが。

で、ie=!!document.all がブラウザに依存するとも言っていません。
javascript の機能をもつどのブラウザでも動作し、ie という変数
には true か false が正しく入ることでしょう。

ですが、ie という変数名は、ブラウザを判別する意図で使われて
いるのは明白ですよね?IEだけの拡張機能であるとは限らないのに、
ブラウザの判別目的で使っているので好ましくないと言っているの
です。
    • good
    • 0

「ie=document.all」では「document.all」と同じものが「ie」に代入されてしまいます。

この場合は「ie.tags('TABLE')」のようにして使うことが出来ますね。「ie=!!document.all」はInternet Explorerあるいはそのコンパチブルかどうかを論理値(trueまたはfalse)として持っておくねらいがあるのでしょう。


punchan_jpさんへ

JavaScriptでは文脈によってオブジェクトを適切に型変換するので「document.all」に対して文字列(Stringオブジェクト)が要求されれば、もし「document.all」が存在すれば「[object]」というような文字列となるでしょう。なければ「undefined」になるかもしれません。論理値(Booleanオブジェクト)を要求するような文脈では「document.all」が存在しなければ「false」となります。「document.all」がある場合には、例外を除いて「true」となります。「document.all」はInternet Explorerではコレクションクラスのオブジェクトとなっているので、こういった単純な型変換ではObjectオブジェクトのようにふるまうでしょう。「document.all」は論理値ではありません。

この場合「document.all」がInternet Explorerの拡張機能であるかどうかは問題ではなくて「document.all」というオブジェクトが存在するかどうかを調べるだけです。したがって「ie=!!document.all」はブラウザに依存するコードではありません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBA IE11 ファイルのダウンロード

(1)作業環境
Windows 7 Professional SP1
Intel(R) Core(TM) i3­3240 CPU @ 3.40GHz 4.00GB
32ビットオペレーティングシステム
Microsoft Office Standard 2010
Excel ver 14
Internet Explorer11


(2)やりたいこと
あるWebページで手動操作の場合、次をクリックすると添付画像のように「~を開くか、または保存しますか?」というポップアップみたいなのがIEの下に現れます。
<a href="/xxxx/download.do?xxxx&xxxx&xxxx&xxxx&type=log">テスト</a>
「保存(S)」をクリックしてデスクトップに保存する。

これをVBAで操作して、ファイルのアップロードを行いたい。
※添付画像で黒線で消してあるのはIPアドレスです。
※上記「xxxx」は、元が固有名称のためこれで置き換えています。


(3)状況
保存されるものは「upload.log」というファイルです。
このポップアップのVBAでの操作方法はまったくわかりません。
下記ページを参照し、書いていることは理解できるためそのまま適用しましたが、どうやらhrefからリンク(fileURL)を取得してもそこにはファイルはないみたいです。
http://www.vba-ie.net/element/subroutine-filedownload.html
ダウンロードされる意図しているupload.logファイルではなく、ある画面のソースコードになっています。
<a href="....">テスト</a>をクリックしたあとにlogファイルを生成していると予想しています。


(4)質問事項
upload.logのファイルをダウンロードをするにはどういうマクロになるのか

以上、ご存じのかたご教示お願いしいたします。

(1)作業環境
Windows 7 Professional SP1
Intel(R) Core(TM) i3­3240 CPU @ 3.40GHz 4.00GB
32ビットオペレーティングシステム
Microsoft Office Standard 2010
Excel ver 14
Internet Explorer11


(2)やりたいこと
あるWebページで手動操作の場合、次をクリックすると添付画像のように「~を開くか、または保存しますか?」というポップアップみたいなのがIEの下に現れます。
<a href="/xxxx/download.do?xxxx&xxxx&xxxx&xxxx&type=log">テスト</a>
「保存(S)」をクリックしてデスクトップに保存す...続きを読む

Aベストアンサー

目的のファイルのURLはサーバーサイドのプログラム中にあってプログラムで書き出されたHTMLには存在しないとおもいますのでIEでファイルを開いて実際のURLを確認してみては?

Qif(document.all && navigator.appVersion.indexOf('Mac')!=-1)returnの意味

よろしくお願いします。
JavaScriptの勉強をしているのですが、参考にしている書籍に以下の構文が出てきまして、それの意味が分からなくて悩んでいます。

//MacIE4,5バグ 回避
if(document.all && navigator.appVersion.indexOf('Mac')!=-1)return

//以降に記してあるとおり、OSがMacintoshだった場合に何らかの処置を行うプログラムなのは分かるのですが・・。
navigator.appVersion.indexOf('Mac')!=-1の部分は、「navigator.appVersion.indexOf('Mac')が1ではなかったら、Macユーザーであるということ、で、falseが返されるのでしょうか?
しかし、そもそもnavigatorオブジェクトはブラウザの種類のことではないのか?と混乱してしまっています。
また、document.allがどのような役割を果たしているのかも分かりません。なぜここでdocument.allが出てくるのでしょうか?

どなたか分かる方いらっしゃいましたら、ご教授宜しくお願いします。

よろしくお願いします。
JavaScriptの勉強をしているのですが、参考にしている書籍に以下の構文が出てきまして、それの意味が分からなくて悩んでいます。

//MacIE4,5バグ 回避
if(document.all && navigator.appVersion.indexOf('Mac')!=-1)return

//以降に記してあるとおり、OSがMacintoshだった場合に何らかの処置を行うプログラムなのは分かるのですが・・。
navigator.appVersion.indexOf('Mac')!=-1の部分は、「navigator.appVersion.indexOf('Mac')が1ではなかったら、Macユーザーであるということ...続きを読む

Aベストアンサー

「document.all」は昔はIEにだけ存在するオブジェクトだったのでIEであるかどうかの判定に使われました。

今ではOperaやNetscape等でもIEへの互換の為に存在するのでIEかどうかの判定に使われる事は減ってきています。
IEであるかどうかの判定ではなく、純粋にdocument.allが在る(使える)かという判定にはもちろん使用されますが。

「navigator.appVersion」は確かにブラウザの種類なんですが、実際にはOS名も含まれていたりすのでOSの判定にも使われたりします。

また、 != -1 というのは indexOf関数の結果が 0~なら文字列が見つかったという意味(真偽ではなく、見つかった位置を返す関数)になるのでこういう比較式を使用しています。
(1でなかったらMacユーザという解釈はちょっと違います。)

参考URL:http://www.openspc2.org/JavaScript/ref/

QIE 10,11でアプリがダウンロードできません

Win7-64bit で、私と妻のアカウント(共に管理者)があります。
Internet Explorer を「11」にしたら、妻のアカウントの方だけフリーソフトなどをダウンロード
出来なくなりました(クリックしても何も反応しない)。
試しに「IE11」を削除して「IE9」に戻したら問題なくダウンロードできます。
「IE10]でもだめでした。

セキュリティーソフトやポップアップブロックを無効にしても関係ないようです。
画像などは普通に保存できるのでアプリだけがダメみたいですが、私のアカウントと設定は同じなのになぜ妻の方だけ出来ないのか不明です。
ちなみに「IE10]と「IE11]のインストールは私のアカウントで行っています。

Aベストアンサー

>セキュリティーソフトやポップアップブロックを無効

(1)WindowsファイアーウォールでIEをブロックしていませんか?
(2)ブラウザのセキュリティ設定でブロックしていませんか?
例:ActivXコントロールとスクリプト「無効」→「有効」(複数あり)
例:レベル「高」→「中高」
例:「ツール」「インターネットオプション」「セキュリティ」「レベルのカスタマイズ」「セキュリティの設定」「ダウンロード」「ファイルのダウンロード」「無効」→「有効」
(3)Vista以降、Administratorでログオンしても作業実行時アクセス権が必要な場合が多い。
プログラムアイコンを右クリック「管理者として実行」で作業(解凍・展開、インストール、起動、コピー、アンインストールなど)

ブラウザIEのみを、フリーソフトのFirefoxやGoogle Chromeなどと併用する(IEでないと開かないサイトもあるためIEも必要)・・・プログラムはあなたがダウンロードする。
ちなみに私は平常(軽い)SRWare Iron(Google Chrome派生)を使用、IEでないと見れないサイトのみIEを起動しています。(IEはほとんど使っていない)

>セキュリティーソフトやポップアップブロックを無効

(1)WindowsファイアーウォールでIEをブロックしていませんか?
(2)ブラウザのセキュリティ設定でブロックしていませんか?
例:ActivXコントロールとスクリプト「無効」→「有効」(複数あり)
例:レベル「高」→「中高」
例:「ツール」「インターネットオプション」「セキュリティ」「レベルのカスタマイズ」「セキュリティの設定」「ダウンロード」「ファイルのダウンロード」「無効」→「有効」
(3)Vista以降、Administratorでログオンしても作業実...続きを読む

Qdocument.all.id1.innerText="ok";

・・・・・・・・・・
</head>
<body>
<div id="id1"></div>
</body>
</html>

はネットスケープではどう書けばいいのでしょうか?

Aベストアンサー

そのdivにテキストがあるとか、他に要素があるとかで変わってくるかと思いますが、
質問文のように、中身が何もないdivにテキストを書き込むには次のようにします。
document.getElementById("id1").appendChild(document.createTextNode("ok"));

NNで試してはいないですが、多分うまくいくはず

QIEのバージョン確認とダウンロード方法

(1)現在IEは11が最新版のようですが、使用IEがどのバージョンか確認する方法を教えて下さい。
(2)もし10以下であれば、11をダウンロードする方法を教えて下さい。

*Windows7を使用しています。

Aベストアンサー

右上の★マークの右のボタンを押す
バージョン情報

もしくは、
Alt + H そして、次にA を押す

Microsoft Update/Windows Updateを有効にしていると、自動的にインストール(半強制)となっているので、無効などしていない限り半強制的にIE11にアップされています

http://windows.microsoft.com/ja-jp/internet-explorer/ie-11-worldwide-languages
ここからダウンロード方法もあります

Qjavascriptのdocument.allについて。

質問です。

javascriptで扱えるdocument.all要素の基本的な使い方や役割や意味などについて教えてください。

document.allについての説明は、IE独自拡張というのがほとんどで、その意味についてはあまりありませんでした。

どなたかご教授願います。
よろしくお願いします。

Aベストアンサー

ドキュメント内のすべての要素を持つオブジェクトで、
id属性やname属性で要素を特定することができたり、
タグ名を指定して要素を取得することができたりします。
(ちょっと動作が遅い気がしますが)
参照URLを見ていただければ、使い方がわかると思います。

参考URL:http://www.tohoho-web.com/js/element.htm#Element

QIE11について

初めまして

実は、今回初めてIE11を使いました。

そこで、ツールのインターネットオプションから、削除を選択し、履歴とダウンロード履歴を削除すると互換表示の設定がすべて削除されます。

これは、IE11の機能でしょうか?

Aベストアンサー

>これは、IE11の機能でしょうか?
いいえ

初心者でもわかる! IE で互換表示 (IE10/IE9)
https://support.microsoft.com/kb/2618122/ja

Q質問です! Operaって、document.all使えるんですか?

質問です! Operaって、document.all使えるんですか?
javascript:alert(document.all)という風に入れたら、[object HTMLCollection]という値が返ってきました
ちなみに、

 Firefox3.6 : [object HTML document.all class]
Netscape7 : undefined
Safari (おそらく4) : Operaと同様。

document.allて、IEだけかと思っていましたが。

Aベストアンサー

Gecko 系も Firefox 以前、Mozilla 1.8 辺(?)から document.all をサポートしています。ただし、

・Full Standards Mode では使用できない。
・document.all.tags は未サポート。
・if (document.all) は必ず偽を返す。

という制約があります。

Bugzilla に長い議論がありますが、anti-MS かはあまり関係ありません。心情的にはともかく、Gecko の開発者は IE の挙動の解析に多大な労力を割いています。

議論の 1 つは、すでに W3C-DOM の getElementsByTagName、getElementById が IE を含むほとんどのブラウザで動作するのに、document.all が必要かどうか。もしサポートしたことにより、開発者が document.all を安易に使い出すようになれば、IE/NN ブラウザ戦争の二の舞になりかねない。しかしながら、すでに all を用いたコードが大量に存在するという現実もあります。

all をサポートするのは良しとしても、今後の開発者が all を使うことを推奨しているわけではない。上記はそういう意思表示と考えられます。

ところで、IE5-7 以下の getElementById が id 属性だけでなく name 属性も検索する、あるいは IE6-7 の getElementsByTagName('*') が要素だけでなくコメント(処理命令や文書型宣言もコメントと見なす)も拾う、というのはよく知られた不具合ですが、これらはもともと all の挙動から来ています。そして前者に関しては IE8 で修正され、getElementById は id 属性のみを検索するようになりました。

つまり、all を実装するにも仕様が不明瞭であり、しかも MS 自身によって変更されうるということです。これに関しては No.2 が言うように、HTML5 の HTMLAllCollection の導入が助けとなるでしょう。

いずれにせよ、Windows プログラミングでもしない限り、今後の開発者が all を使う必要はないと思います(IE 専用であることを示すために、敢えて all を使うことはあるでしょうが)。あと、JScript と MSHTML は区別すべきかと思います。

Gecko 系も Firefox 以前、Mozilla 1.8 辺(?)から document.all をサポートしています。ただし、

・Full Standards Mode では使用できない。
・document.all.tags は未サポート。
・if (document.all) は必ず偽を返す。

という制約があります。

Bugzilla に長い議論がありますが、anti-MS かはあまり関係ありません。心情的にはともかく、Gecko の開発者は IE の挙動の解析に多大な労力を割いています。

議論の 1 つは、すでに W3C-DOM の getElementsByTagName、getElementById が IE を含むほとん...続きを読む

QIE11からのダウングレード

Win7・IE8にてダウンロードセンターよりService Pack 1を入手しました。
トラブルも無く無事インストール出来ましたが、同時にIEが8⇒11へと三段跳びのアップグレードとなってしまいました。そこで11からいまだ未インストールの10、または9へダウングレードするにはどの様な方法が確実なのでしょうか???
宜しくお願い致します。

Aベストアンサー

IE11をアンインストールする
プログラムのアンインストール→インストールされた更新プログラムの表示

すると、以前のIEのバージョンに戻るので、IE9なりIE10なりをインストール
IE9やIE10をインストールしても、デフォルトだと最新のIEに自動配信でバージョンアップするので、IE11の自動配信無効化にするのがよいでしょう。
もし、IE9を入れてIE10を無効にしたいなら、IE10の無効化も行ってください。
IE9の無効化をしたいなら、IE9の無効化も行ってください。
IE8のままなら、IE9/10/11の自動配信の無効化をそれぞれ行ってください。

インストール方法をよくみてから行ってください

IE11自動配信無効化ツール
http://www.microsoft.com/ja-jp/download/details.aspx?id=40722
IE10自動配信無効化ツール
http://www.microsoft.com/ja-jp/download/details.aspx?id=36512
IE9自動配信無効化ツール
http://www.microsoft.com/ja-jp/download/details.aspx?id=179

IE11をアンインストールする
プログラムのアンインストール→インストールされた更新プログラムの表示

すると、以前のIEのバージョンに戻るので、IE9なりIE10なりをインストール
IE9やIE10をインストールしても、デフォルトだと最新のIEに自動配信でバージョンアップするので、IE11の自動配信無効化にするのがよいでしょう。
もし、IE9を入れてIE10を無効にしたいなら、IE10の無効化も行ってください。
IE9の無効化をしたいなら、IE9の無効化も行ってください。
IE8のままなら、IE9/10/11の自動配信の無効化をそれ...続きを読む

Qdocument.write()を外部JSファイルに記述すると、IE8で表示されない

HTMLからとあるJavaScriptファイルを読み込み、
そのJavaScriptファイルでdocument.write()
を使ってHTML側にテーブルを記述しようとしています。

しかし、Google ChromeやFirefoxでは
正常にテーブルが表示されますが、
IE8ではセキュリティの警告(※最下部参照)が出た後、
それを許可してもテーブルは表示されません。

何が問題なのでしょうか?
Google Adsenseなどはこの方法で広告を表示していますが
IE8で正常に表示されますし、セキュリティの警告も出ません。

[test.js]
document.write('<table border="1"><tr><td>test</td></tr></table>');

[test.html]
<html>
<head>
</head>
<body>
<script type="text/javascript" src="test.js" />
</body>
</html>

※IE8(英語版)のセキュリティ警告は以下です。
"To help protect your security,
Internet Explorer has restricted
this webpage from running scripts
or ActiveX controls that could
access your computer.
Click here for options..."
この後"Allow"を選んでもJavaScriptで
書かれるはずのテーブルは表示されません。

HTMLからとあるJavaScriptファイルを読み込み、
そのJavaScriptファイルでdocument.write()
を使ってHTML側にテーブルを記述しようとしています。

しかし、Google ChromeやFirefoxでは
正常にテーブルが表示されますが、
IE8ではセキュリティの警告(※最下部参照)が出た後、
それを許可してもテーブルは表示されません。

何が問題なのでしょうか?
Google Adsenseなどはこの方法で広告を表示していますが
IE8で正常に表示されますし、セキュリティの警告も出ません。

[test.js]
document.write(...続きを読む

Aベストアンサー

http://bakera.jp/yomoyama/shorttag#section2-4
これはHTMLには適用されないから
<script type="text/javascript" src="test.js" />
ではなく
<script type="text/javascript" src="test.js"></script>
と書かないといけない、とみなされているかな。思いつくのは。

#title要素は省略出来ない。
#名前空間宣言が存在しないとXHTMLにはならない


人気Q&Aランキング