JavaScript

整数の数値リテラルから直接Numberのメソッドを呼ぶ

255.toString(16); // (1) ドットが小数点と見なされSyntax Error (255).toString(16); // (2) 255..toString(16); // (3) 255 .toString(16); // (4) (4)はJS MinifierやBookmarklet Builderが(1)に変換してしまうので、(3)。 Number オブジェクトのメソッ…

目次を生成するブックマークレットを作った

インストールはリンク先から。 TOC - Hatena::Let IE対応は諦めた。 リストをネストする部分は、コードは書き直したけど、やっていることは前に作ったものと大体同じ。 目次をクリックしたときの処理をa.addEventListener( 'click', (function (elm) { retur…

ファイル名順にソートする

Array#sortでファイル名順にソートするための比較関数。具体的には、数字部分は桁数に関わらず数字順に比較し、それ以外の文字は辞書順に比較する。全角数字にも対応。他にも考慮すべき点があるかもしれない。 function compareFileNames(a, b) { var fullWi…

ちょっとしたことを試すだけのページでも、body開始タグは省略しないこと

<meta charset="UTF-8"> <title>TEST</title> <div id="result"></div> <script> document.getElementById('result').innerHTML = '12345'; </script> IE8とFirefox3.6ではエラーとなる。開発者ツール/Firebugで見ると、末尾のscript要素がhead要素の子になっている。内容のない要素はスキップしてしまうのかな。不思議。 div#resultの前に</meta>…

chrome.browserAction.onClicked.addListener テンプレート

Google Chrome拡張機能用。あるページがすでに開かれていればそのタブを選択。開かれていなければ新規タブでページを開く。HOGE.htmlのところを開きたいページのパスに書き換える。 素直にforループにした。 chrome.browserAction.onClicked.addListener(fun…

オブジェクト(JSON)から定義リスト(DL要素)を生成する

array2listを作ったついでにと思ったけど、こっちの方が実用性がありそう。array2listにも少し手を入れて、オブジェクトと配列の入れ子にも対応したので、JSONのdumpもできる。 function object2dl(object, doc) { if (!doc) doc = document; var dl, dt, dd…

多次元配列からリスト(UL・OL要素)を生成する

オブジェクトの入れ子にも対応したバージョン function array2list(array, ordered, doc) { if (!doc) doc = document; var list = doc.createElement(ordered ? 'ol' : 'ul'), li; for (var i = 0; i < array.length; ++i) { var item = array[i]; var item…

0と1を交互に得る

var f = 0; f^=1; // => 1 f^=1; // => 0 f^=1; // => 1 f^=1; // => 0 おまけ:0と-1を交互に得る 使い道思い浮かばないけど...。 var f = 0; f=~f; // => -1 f=~f; // => 0 f=~f; // => -1 f=~f; // => 0

livedoor Readerをホイール操作ですいすい読むためのGreasemonkey

もともと#headerの部分でマウス操作ができるけど、コストの高い「クリック」に次の記事への移動が割り当てられているため、どんどん記事を流し読みしていくような使い方だと指が疲れる。今になってクリック→クリックしっぱなしで自動スクロールできることを…

リンクを左ボタン長押しによって新規タブに開きたい

かざぐるマウスというソフトでできる(左ボタン長押しにCtrl+Shift+クリックを割り当て)んだけど、僕の環境だとFirefoxだけうまく作用しない(効くリンクと効かないリンクがある)ので自分で作ることにした。最初はGreasemonkeyスクリプトとして作っていた…

ソートアルゴリズム

バブルソート 挿入ソート シェルソート 選択ソート マージソート バブルソート function bubbleSort(data) { var l = 0, r = data.length - 1, i, temp, last; while(l < r) { i = r; last = l; while(i > l) { if(data[i-1] > data[i]) { temp = data[i-1];…

Array.new

「new」は予約語だった。 Array.neww = function(len, val) { var arr, i, undefined; if (typeof len !== 'number') { throw new TypeError('"' + len + '" is a not number'); } if (len < 0) { throw new RangeError('invalid array length'); } arr = ne…

シェーカーソート

function shakerSort(array) { var l = 0, r = array.length - 1, last, i, temp; while(true) { last = -1; for(i=l; i<r; ++i) { if(array[i] > array[i+1]) { temp = array[i]; array[i] = array[i+1]; array[i+1] = temp; last = i; } } if(last == -1) return; r = last; last =</r;>…

バブルソート

function bubbleSort(array) { var r = array.length - 1, last, i, temp; while(0 < r) { last = -1; for(i=0; i<r; ++i) { if(array[i] > array[i+1]) { temp = array[i]; array[i] = array[i+1]; array[i+1] = temp; last = i; } } if(last == -1) return; r = last; } }</r;>

選択ソート

function selectionSort(array) { var i = 0, len = array.length, min, temp; for(; i<len; ++i) { min = i; for(var j=i+1; j<len; ++j) { if(array[min] > array[j]) { min = j; } } temp = array[i]; array[i] = array[min]; array[min] = temp; } }</len;>

はてなダイアリーの注釈をその場に展開するブックマークレット

注釈*1が多い記事は、ページを上下に行ったり来たりしなければならなくて面倒*2 *3なので、注釈のリンクを注釈の内容に置き換える*4ブックマークレットを作った。 前のはいまいちな気がしたので書き直し。まだ納得いかないけどとりあえず。もう少し汎用的に…

FirefoxではHTMLCollection#namedItem()の戻り値は(該当する要素が複数あっても)1つの要素

Greasemonkeyスクリプトを作成しているときにつまずいた。 XPCNativeWrapper - MDC (XPCNativeWrapper の制限事項)HTMLCollection に設定された XPCNativeWrapper では、名前による要素のアクセスが動作しません。 この場合は、コードとして namedItem() メ…

配列をソートするとき(Array#sort()の引数)に使う比較関数についての覚書

JavaScript 第5版の118ページ。 基本 引数を指定しなければ辞書順でのソートになる。数値は文字列として比較されるので、33と4では1文字目(3と4)の比較となり33が先になる。 var a = [33, 4, 1111, 222]; a.sort(); // 1111, 222, 33, 4(辞書順) 他の順…

GoogleブックマークをすっきりさせるGreasemonkeyスクリプト

スペース節約、横スクロールバー回避。 querySelectorAllを使っているので、Firefox 3.5以降でないと動かない。 // ==UserScript== // @name Google Bookmarks Simplifier // @namespace http://d.hatena.ne.jp/rikuba/ // @include http://www.google.com/b…

見ているページからそのサイトの人気エントリー一覧にジャンプするブックマークレット

はてなブックマークでは、URL を指定して、そのサイト内の人気エントリを抽出できます。http://b.hatena.ne.jp/entrylist?sort=count&url=http://d.hatena.ne.jp/tokuhirom/ url= 以降に人気記事を読みたいサイトを入れます。 プロ・アマ・プログラミング言…

Twitterの発言からその前後の会話を調べるブックマークレット

Big Sky :: Twitterの発言から、その前後の会話を簡単に知る方法でhttp://search.twitter.com/search/thread/ステータスIDで前後の会話を調べられることを知ったので、ブックマークレット化。 javascript:(function(){if(!/^https?:\/\/twitter\.com\/[^\/]+…

ブックマークレットのソースコードの直後に登録用のリンクを追加するブックマークレット

はてなダイアリーは<a href="javascript:〜">なリンクが書けないので。 javascript:で始まるPRE要素の直後に、そのソースコードの行頭スペースと改行を取り除いたものをhrefとしたリンクを挿入。 Firefox 3.5で動作確認。6行目のtextContentをinnerTextに書き換えればIEでも動く。一</a>…

行間を広げるブックマークレットがあるページで動かなくて

使っていたのは以下のもの。 javascript:(function(){ var e = document.body.getElementsByTagName('*'); for(var i=0,l=e.length; i

HTML文書内の見出しを抽出し、OL要素で階層化する

目次を生成するブックマークレットを作った - rikubaの日記 掲示板/JavaScript質問板/JavaScript DOMの勉強の仕方 - TAG index Webサイト (5). HTML 4.01 文書内の見出し(H1-H6 要素)を抽出し、OL 要素で階層化せよ。 <ol> <li>H1-1 <ol> <li>H2-1 <ol> <li>H3-1</li> <li>H3-2</li> </ol> </li> <li>H2-2 </ol> <li>H1-2 <ol></ol></li></li></ol>…

Webkitでstyle要素をdisabled=trueにしてもスタイルシートを無効にできない

SafariやGoogle Chromeで、style要素をdisabled=trueにしても、そのstyle要素のスタイルシートを無効にできない。 document.getElementsByTagName('style').item(0).disabled = true; 一方link要素で読み込んだ外部スタイルシートは、そのlink要素をdisabled…

はてなダイアリーで好きなテーマ(デザイン)を適用するブックマークレット

ベーステーマを指定していないダイアリーで効かなかったので修正。 はてなグループの日記でも可。 下記のコードはdeltaのCSSファイルのパス(/theme/delta/delta.css)を指定した例。 javascript:(function(){if(!/[dg].hatena.ne.jp/.test(location.href))ret…

script要素のdefer属性

『初めてのJavaScript』9ページ。 下記のようにscript要素にdefer="defer"(HTML 4であれば属性名を省略して属性値deferだけでも良い)を指定すると、ページの処理と表示が終了してからコードが実行されるようになるそうだ。 (コンテンツを生成するコードと…

『初めてのJavaScript』が届いた

今日からこの本で勉強していく。 まずは正誤表を確認。 初めてのJavaScript サポートページ 正誤表 第3刷なので誤植でつまずくことはあまりなさそう。