js

簡易テストツールを公開しておきます

js

今年はブログを書きたいと述べて二ヶ月以上経ってしまいました。最近、大規模だったり高速だったりという需要に応えるJavaScriptを書く道具がいくつも出てきています。一方で、小規模でもっと手軽にという道具がイマイチ少ない気がします(主観)。jQueryで…

CSS3なライブラリxcss.jsを作ってみました

GitHub - ofk/xcssjs デモ(オリジナルはCSSでアイコンをデザイン - Hail2uのDesign icon with CSS) デモの結果はオリジナルと同じでよく分からないかもしれませんが、CSSが違います。xcss.jsを読み込むとベンダープリフィックスは記述不要です。つまり、ど…

BigInteger作った

js

ちょっと使おうと思ったのだけど、負数が使えない実装が多かったりしたので、自作してみた。 https://github.com/ofk/bigint 四則演算しかないし、遅いので、まだ改良する予定。使おうと思った他のライブラリのメモ。 Classes.Big Number - JSFromHell.com: …

Jimmy Walesがあまりに的確に出現するので調査した

Jimmy Walesが出現するChrome拡張に大ウケした。ニコ動とかITMediaとかいまいちなページもあるが、割と的確に挿入されるのがなんかすごい。 というわけで、さっそく解体してみた chrome-extension://{ID}/ でChrome拡張はファイルにアクセスできるので chrom…

スクロールバーの幅を取得するコード

js

JavaScriptでスクロールバーの幅を取得したいと思ったのでさくっと書いてみた。スクロールバーが表示されるiframeを生成して、offset〜を取得することで、iframeサイズとの差がスクロールバーの幅となることを利用して計算します。IE7ではDOMの構築が終わっ…

ニコニコ動画七月版プレイヤーのAPI

js

http://blog.nicovideo.jp/2010/07/post_257.phpで告知されていたプレイヤーのAPIを確認しました。 document.getElementById("flvplayer").ext_*() で実行します。 ext_play(boolean) trueなら再生。falseなら停止。 ext_setPlayheadTime(number) number秒に…

多段継承できるクラス生成関数を頑張って作りました

js

JavaScriptでクラスを作るのは簡単なのですが、継承したり、オーバーライドしたメソッドを簡単に呼び出すとなると途端にレベルが上がります。 ChromeやFirefoxで使うので、関数呼び出し多めでも大丈夫(IE6でも動くけど) this.parent.method()で親クラスの…

Object#toSourceが便利なんだけど、文字列がエスケープされたままだったりするので、関数で作ってみた

js

Firefoxでちょこっとチェックしただけです。五分ぐらいで適当に書いているのだけど、毎回毎回書くのは時間の無駄なので。 function toSource(obj, indent) { indent = indent || ""; if (obj === null) return indent + "null"; if (obj === void 0) return …

話題の10分コーディングをやってみたんだけど、残念な出来にしかならなかった

js

ネタ元。10分以内に作ることは心がけたけど、結果は残念な感じに。 <html> <body> <script type="text/javascript"> /* function calc(count, cards) { var result = document.getElementById("result"); if (!count) result.innerHTML = "impossible"; var l = cards.length % count; if (l) cards = ca</body></html>…

日本のJavaScript界隈のブログを適当かつ詳細にまとめてみようと思って挫折したけど、もうちょっと頑張ってみた

あらすじ 僕は本無しにJavaScriptを覚え、その後も全く本を読まなかったため(今もまだJavaScript関連の本を持っていない)、友人の変態C++プログラマにJavaScriptを覚えるための本を聞かれて、答えることが出来ませんでした。しかし、そんな中、颯爽と助け…

IE5で動くjQueryっぽいライブラリができていました

半分ぐらいjQueryからコードを持って来たような気がしますが、IE5でもjQueryっぽく書けるライブラリができていました。正直、あんまりブラウザのチェックとかしていないので、実際に使うのは結構危険です。 http://code.0fk.org/$/ とりあえず、イベントとア…

毎秒100回対策を20分で書いてみようとして失敗したという話

js

Googleのトップページを開くと毎秒100回JavaScriptが実行されるよ そうですか。 window.focusとwindow.blurが切り替わる度に実行を止めるsetTimeoutラッパー作ればいいんじゃねーの?(window.focusはFirefoxだとちゃんと考えているような挙動するっぽいので…

ブラウザごとのlocation.hashの挙動のまとめ

js

今更ですが、location.hashで現在のステータスを管理するのがマイブームです。しかし、ASCII以外をぶち込むとブラウザごとに挙動が違うっぽいです。というのを調べておいて、書いておくのを忘れたので、まとめておきます。 方法 以下のアクションを起こした…

jQueryやPrototype.jsのセレクタ関数の動作速度を二倍にするライブラリを作りました

js

と言っても、前々から作っているセレクタ関数が依存無しで簡単に切り出せそうだったから、切り出しただけです。 http://kquery.if.land.to/ksk.js 動作ブラウザはIE5.5以上です。これを導入するとIE5でも動作します。 使い方 ksk("div"); // divタグを取得し…

CSSセレクタライブラリのまとめ

js

すぐにuupaa-selectorに負けたのですが、Quick Phaseを露骨に充実させるのはkQueryの目指す方向じゃないので、もうちょっと探索方法とか見直せるところを探そうかなって思っています。ちなみに今のバージョンは前のバージョンよりも少し遅くなっています。ま…

Selectors API以降のセレクタ実装 - jQueryとSizzleとuupaa-selectorとkQuery

js

低速復活中なので、kQueryを細々と書き直しました。 http://kquery.if.land.to/slickspeed2/system/kquery.js URLからもわかるように大好きなSlickSpeedも置いておきました。 http://kquery.if.land.to/slickspeed2/ http://kquery.if.land.to/slickspeed2/s…

DOMElement#uniqueIDではまること

js

要素を区別するために固有のIDをつける必要がある。jQueryだと$.data(obj)という方法でやっている。やっていることはobj["jQuery" + (+new Date)]という値に連番を入れることなんだけど、これだと関数呼び出しのコストが半端無いことになる。というわけで、$…

POST送信のページをブックマークするブックマークレット

あるサイトでは検索がPOSTで送信しないと結果が返ってこないので、ブクマできない。というわけで、ブクマするためのブックマークレットを作った。 javascript:for(var i=0,f;f=document.forms[i];++i)if(f.method.toLowerCase()=="post")(function(f){f.onsu…

ビルトインオブジェクトに拡張したい10のメソッド

js

ビルトインオブジェクトをこねくり回すのはあまり好まれない方法だけど、僕は好きなので、割とやりたくなる。というか、やる。でも、やりはじめると際限なく拡張したくなってしまう。というわけで、最近は、とりあえず10と決めているので、それを書いてみる…

==と===のまとめ

高速化 - uupaaの開発日記で==よりも===が良いと知る。 ↓ 早速実験するけど、速くならないよ、と記事を書いた。 ↓ 等価演算子と厳密等価演算子 in ECMA-262 3rd Edition - 0x集積蔵で型が違えば、厳密等価演算子の方が有利だと説明があった。 ↓ 納得しつつ、…

JavaScriptで文字列比較は抽象的等価比較の方が速い

以下は間違っているのでこれを参照して下さい。等価演算子と厳密等価演算子 in ECMA-262 3rd Edition - 0x集積蔵でString同士をやっていないので、やったら、結果が逆転しているような気がする。ただ、アルゴリズムを見る限りはどちらも同じような感じの経路…

厳密比較演算子が必要な場面

js

つまり、比較演算だと同じものとされるものの組み合わせ。 null==undefined ==false、==0、[]=="" false==[]、false==0、false==""、false=="0" 0==[]、0==false、0==""、0=="0" ""==[]、""==false、""==0 "0"==false、"0"==0 空のオブジェクトは含まれない…

等価演算子(==)と厳密等価演算子(===)

以下は間違っているのでこれを参照して下さい。高速化 - uupaaの開発日記で高速化について書いてあった。最初のfor文の長さの参照とインクリメントの話とループ展開は知っていたけど、厳密比較演算子も速くなるというのは初めて知った。演算子にそんなに違い…

(IE5で)最速セレクターを作ってみた

cssQueryが非常に遅いので作ってみた。まぁ、古いから仕方ない。 http://kquery.if.land.to/code/selector.html http://kquery.if.land.to/slickspeed/ 上のslickspeedは、広告が自動挿入されるサイトにおいてあるため、実行すると結果が狂う可能性がありま…

CSSセレクターの実装方針メモ

js

最近、携わったサイトを見るとIE9割とかざらで、IE5.5が現役というのもあった。一番ましでもIE7>IE6>>当分越えられない壁>>Fx3>Fx2>>Safari3>Opera9=IE5.5ぐらいで、やはり、IEで高速に動かないと話にならない。となると、XPath変換とかはありえない(ちなみ…

IEで高速なセレクターを作るアイディアがわいたけど、うまく動かない。

<html> <head> <script> if (document.createStyleSheet) { window.__getElementsBySelector = function (selector, elem) { if (elem) { elem.style.behavior = null; var cache = window.__getElementsBySelector.cache; cache[selector][cache[selector].length] = elem; } };</head></html>…

Prototype.jsでクラス指定するとき、二倍速くする方法

$$(".warning"); // ↓ $$("*.warning"); // なぜか二倍ぐらい速い セレクターの特徴を掴むためにベンチにかけているんだけど、色々やってもこうなる。正確なベンチやった人とか、Prototype.jsに詳しい人、教えて下さい。

IE5でencodeURIするために、replaceの第二引数に関数を持ってこれるようにした

http://kquery.if.land.to/code/js/patch.js ここにencodeURIはあったので、第二引数を持てるようなString#replaceを作った。まぁ、原案自体はここで取り上げられていたものだから、これでlastIndexが使えないことを考えて、ちょっとだけ動くようにしただけ…

スタイル読み取り用の関数を作った

動作確認用 jQueryと違うのはgetComputedStyleとcurrentStyleの分岐が関数の外側にあることぐらいです。さぁ、セレクターを本格的に作る前に、依存関係の無いスタティックな関数から作っていこうか。

Function.prototype.applyとかArray.prototype.spliceのIE5用のコード

applyはObject以外のものをthisにしようとする場合、x.__applyに代入できないので、constructorからprototypeを辿って、そこに入れる感じ。Array関連はcall等を一切使わず、forだけで処理するように作りました。あと、全体をfunctionで囲んだ無名関数の実行…