Firefox document.getSelection(); IE document.selection.createRange().text Safari window.getSelection(); Opera document.getSelection() 追記: id:takiuchi さんに、 Operaでの取得方法を教えていただいた。
配列はArrayクラスのインスタンスです。ただし、以下の前提があります。 配列のインデックスは0から連続した自然数である 勘違いしがちなのは、lengthプロパティがオブジェクトのメンバ数を表す、と思ってしまうことです。実際には最大の自然数のインデックス+1の値が格納されます。上の前提により、これが配列の要素数を表すことになります。 var ary = new Array(); ary[-2] = "N"; //インデックスが自然数でないので配列の要素ではない。 ary[3] = "Y"; //配列の要素 ary[3.5] = "N"; //インデックスが自然数でないので配列の要素ではない。 alert(ary.length); //"4"と表示される。 //ary[3]があるとary[0],ary[1],ary[2]はあるとみなされる。 //ary[-2],ary[3.5]は要素としてカ
ブラウザの表示領域を取得するに当たって、「ブラウザの種類」×「表示モード(標準/互換)」によって参照するプロパティが変わってきます。 IE、FireFox、Opera、Safariにて、表示モード毎に参照すべきプロパティをまとめてみました。(Safariについては2007/05/20に追記) 調査したのは、下記のプロパティです。 window.innerWidth window.innerHeight document.body.scrollWidth document.body.scrollHeight document.body.offsetWidth document.body.offsetHeight document.body.clientWidth document.body.clientHeight document.documentElement.scrollWidth d
obj.watch(プロパティ名, 関数オブジェクト) 変更があったときに指定した関数オブジェクトが呼ばれる。
JavaScript には基本的にブロックスコープというものが存在しない。どうしてもブロックスコープを扱いたいときは function 式を使ったりする。 var a = 10; { var a = 20; print(a); // 20 } print(a); // 20 var a = 10; (function () { var a = 20; print(a); // 20 })(); print(a); // 10 だがやはりブロックスコープがあったほうが便利ということで JavaScript 1.7 では let 式、let 文、let 宣言が導入される。 var a = 10; let (a = 20) { print(a); // 20 } print(a); // 10 しかしこれでは対応するブラウザが Firefox 2 以降などに限られる。ところが、with 文とオブ
正規表現で"\d"は、"[0-9]"と一緒だとずっと思っていましたが、FireFoxでは全角数字もマッチします。(FireFox1.5.0.4で確認) /\d/.test('1') // =>true /\d/.test('1') // =>trueちなみにIE 6、Opera 9では、"/\d/.test('1')"はfalseとなります。 気になったので、"\s"、"\w"についても調べてみたところ、下記のような結果になりました。 パターンFireFox 1.5,2.0IE 6, 7Opera 9 /\s/.test(' ') // 半角truetruetrue /\s/.test(' ') // 全角truefalsetrue /\d/.test('1') // 半角truetruetrue /\d/.test('1') // 全角truefalsefalse /\w/.test('
DOM仕様書にこれらのプロパティについて図解入りで説明がありわかりやすい。 文字を選択した時に表1のプロパティがどのように変化するかを表示するサンプル。 http://www.bit-hive.com/~tomita/RangeDump/ JavaScriptのソースはhttp://www.bit-hive.com/~tomita/RangeDump/range.js 3. 現在の選択範囲の取得の仕方(IEの場合) IEのRangeオブジェクトにはテキストの選択範囲を表すTextRangeと画像などのコントロールオブジェクトの選択を表すControlRangeの2種類が存在する。 3.1 TextRange,ControlRangeの取得 IEの場合Selectionはdocument内に既にあるので以下のようにして取得できる。 var range = document.selection
O'REILLY JavaScript 第3版 のスコープあたりを読んでいて混乱してきたので、整理がてらメモ。 1.オブジェクトグローバルオブジェクト 2.実行コンテキスト関数を実行するたびに新しいコンテキストを作成する。スタック構造をしており、スタックのTopが現在の実行コンテキスト。 (スタックフレームのようなもの) 関数外部(グローバル)のJavascriptコード実行時の実行コンテキストはグローバルオブジェクト関数内部のJavascriptコード実行時の実行コンテキストは関数実行時に作成されたCallオブジェクト 実行コンテキスト==グローバル/Callオブジェクトっぽい書きかたがしてある。 3.スコープチェーンスコープチェーンはグローバル/Callオブジェクトのリスト。変数を参照する際に、スコープチェーンの末端から順番に探される。リストのトップはグローバルオブジェクトとなる。 実
概要 Javascriptでサーバーとの通信を行なうためのメソッド。 クライアント→サーバーへGET/POSTメソッドでRequestを出し、サーバーからはXMLドキュメントを受け取る。非同期通信が可能でRequestを送信してResponseが返るのを待つことなく別の処理を行なうことができる。 クライアント サーバー | GET/POST | |------------>| |(*1) | Requestを処理 | | |<------------| XMLドキュメントで応答を返す | XML | | | (*1) 非同期通信を行なっていれば、ここでサーバーからの 応答(XMLドキュメントを待つことなく別の処理を行なえる。 XMLHttpRequestオブジェクトの生成 IEと非IEでオブジェクトの生成方法が異なる。 ◎ IE try { req = new ActiveXObject(
target="_blank" を使わないで新しいウィンドウでリンクを開く方法 2006-03-14-5: [JavaScript] <a href="foo.html" target="_blank">foo</a> を使えば新しいウィンドウでリンクが開きますが,これは XHTML 1.1 や XHTML Basic では採用されていません. ではどうするかというと,スクリプトを使うわけですが, <a href="javascript:void(0)" onclick="window.open('foo.html');">foo</a> こうすると,一見解決したようですが,JavaScript が off の場合はリンク先に飛べません. しかも,ステータスバーにリンク先が出ないので不安になります.これを <a href="foo.html" onclick="window.open('f
id:quaa:20060306#p1を見て、ループを回して要素にアクセスしたときに速度がどうなのか気になったので調べてみた。 スクリプト <html> <body> <script type="text/javascript"> function x(exp, type) { return document.evaluate(exp, document, null, type, null); } var result = {}; Function.prototype.time = function (s) { var func = this; result[s] = [0]; return function() { for (var i = 0; i < 10; i++) { var start = new Date().getTime(); var r = func.apply(thi
今日は、 JavaScript の XMLHttpRequest オブジェクトの使い方を調べてみたので、それをご紹介しようと思います。 XMLHttpRequest はサーバーに対して HTTP リクエストを発行するためのオブジェクトで、 Ajax の A (Asynchronous) を司る中核技術です。これにより、Web ページを切り替えることなくサーバーからデータを取得し、ページ内容を更新することができます。 さあ、一緒に Ajax の世界へと足を踏み入れましょう!(^^) 使用方法 それでは、XMLHttpRequest オブジェクトの使用方法を順を追ってご紹介します。 XMLHttpRequest オブジェクトの作成 XMLHttpRequest オブジェクトを作成する方法は、 Firefox, Opera と IE で異なります。 Firefox, Opera の場合は単に X
[ajax][javascript][はてブ] はてブの「ブックマークの確認」ページは、IEでメモリリークする! IE のメモリリーク調べる為の「Drip」ってツールが ここにあって、 このツールは単純にリークしそうなコードチェックしたり、 オートリロードして、外部から参照したメモリ使用量を記録してくれるだけなんだが はてブの追加ページで確認するとこんな感じになる。 (オートリロードなんで負荷高くなるから、悪用したり、やりすぎたりしないようにw) タスクマネージャー等の、外部から参照したメモリが増えているからといっても OSがアプリケーション用にキャッシュしているメモリが増加しているだけの 可能性があるから、一概に鵜呑みはできないんだが 平均して1回のリロードに 1M 近く増えていくとかおかしい。 (MicroSoft もタスクマネージャーで確認しろっつってるし) IE単独だと、閉じた時点
Justin Rogers Microsoft Corporation June 2005 日本語版最終更新日 2006 年 2 月 3 日 Web 開発者の進化 以前は、メモリ リークは Web 開発者にとって大きな問題ではありませんでした。ページは比較的単純に保たれ、サイト内の異なるロケーション間のナビゲーションは解放されたメモリをクリーンアップするうえで優れた方法でした。リークがあった場合も、たいていは気付かないほど小さなものでした。 新しい Web アプリケーションは、より高い標準に従います。ページはナビゲートされずに何時間も実行され、Web サービスを通じて更新情報を動的に取得する場合があります。複合イベント スキーム、オブジェクト指向の JScript、およびアプリケーション全体を生成するためのクロージャを組み合わせることで、言語機能が限界点に達します。これらの変更およびその他
複雑で重くなった JavaScript を高速化する方法 2006-01-15-2: [JavaScript][Code] 兎にも角にも . (ドット) を減らすことが大切っぽい. 例えば, for (var i = 0; i < array.length; i++) { .... } と書いているのを for (var i = 0, len = array.length; i < len; i++) { .... } こう書くだけで数倍速度が変わるみたい. - via: IT 戦記 http://d.hatena.ne.jp/amachang/20060114/1137243389 http://d.hatena.ne.jp/amachang/20060112/1137085710
まぁ、かなり知られてる話ですが JavaScript は .(ドット) の計算がかなり遅い。まぁ、簡単なスクリプトなら問題にならないが。web2.0的には大違いなのであります。ちなみに、.(ドット) の計算に比較演算の 3 倍のコストがかかる(IEはとくに)。 ということで、for 文は下のように(比較に .(ドット) を使わない)書くくせをつけましょう。地道な差が大きなパフォーマンスを生みます。 // for 文 2.0 for(var i = 0, len = array.length; i < len; i++) { .... }各種ライブラリの for 文 1.0 を for 文 2.0 化するだけで、CPU 使用率がけっこう下がりました。 予断ですが、間違っても .(ドット) を避けるために with 文を使うようなことはやめてください。 with 文のコストは 比較演算の 8
っていうか誰か prototype chain を視覚的にわかるようにして! ECMAScript の仕様にも図があって、わかんないことはないんだけど、まだなんかいまいち納得しきれてない。 プロトタイプチェインについてのより詳しい説明はプログラマのためのJavaScriptに譲るとして、図だけ書いてみた。 プロトタイプチェーン 注意すべきなのは、__proto__プロパティというのは便宜上の存在であり、処理系によってはアクセス出来ないこともあるということだ。仮にアクセスできたとしても、EcmaScriptの仕様書は名前まで規定していなので、__protoobj__の様な違う名前が使用されていることもあり得る。あくまで、概念的な存在として認識して欲しい。仕様書内では[[Prototype]]として記載されているらしい。
JavaScriptでカリー化。ありがち、つうか実際にあるでしょうね。小ネタと思ってやりはじめたら、意外と混乱した。一種のメタプログラミングのはずだが、実際にはテキスト加工処理。 内容: カリー化ってなに? カリー化を行う関数を作る:準備 カリー化を行う関数を作る:テキストのパッチワーク カリー化を行う関数を作る:組み立て ●カリー化ってなに? 2引数の関数f(x, y)に対して、「gがfのカリー化」だとは、f(x, y) = g(x)(y) が常に成立すること -- ゴチャゴチャ説明するより実例実例: functio sum(x, y) { return x + y; } このsumのカリー化の例: function curried_sum(x) { return function (y) {return sum(x, y);} } curreid_sum関数は1引数で、戻り値として関数
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く