素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

2008-04-01から1ヶ月間の記事一覧

getElementByAttributeみたいなものを作った

ページが見つかりません | Mozilla Developer Networkを見てふと思いつく。 HTMLElement.prototype.getElementsByAttribute=function(attrib,value){ var xpath='//*[@'+attrib+(value=='*'?'':'="'+value+'"')+']'; var xRes=document.evaluate(xpath,this,…

String.prototype.matchでは正規表現にマッチした結果が配列で返される

RegExp.$1とかを使わなくても、こんな風な使い方ができる。 var str='3.14,1.993,23.3,3' var result=str.match(/\d+\.?\d*(?!,)/g).filter( function(x)parseFloat(x)>2 ) console.log(result); カンマで区切られた数値を正規表現で調べて、filter関数を使…

外部リンクにtarget="_blank"をつける

var $x=function(xpath){ var xpathR=document.evaluate(xpath,document,null,7,null); var result=new Array; for(var i=0;i

何故[]==[]はfalseなのか

追記2:hogeさんのコメントによると、文字列などは特別扱いだから""==""がtrueになるそうです。ということで、下記の説明は文字列や数値には適用できません。追記:あれ、これじゃ''==''がtrueな理由を説明できない。たぶん下記の説明は間違い。 なんで[]==[…

[]==[]はfalse

[]==[]とか、[1,2,3]==[1,2,3]とかは全てfalseなので、配列を比較する場合はこんな関数を用意することにした。 function checkArray(one,two){ if(one.length!=two.length)return false; return one.every(function(x,i)x===two[i]) } checkArray([],[])//tr…

for each文とfor文

for(var item in window){ console.log(window[item]) } は、 for each(var item in window){ console.log(item) } と同じ?firebugでやったら微妙に違う(後者は配列として表示された)けど、なんだろう。for eachは値を取り出すときに使う。forはプロパテ…

はてなキーワードへのリンクを削除するGreasemonkeyを修正

はてなキーワードへのリンクを削除するGreasemonkey with DOM:Range - 素人がプログラミングを勉強するブログはうまく動いていなかった。 さらに、はてなグループのキーワードのclass名がokeywordということをすっかり忘れていた。結局、DOM:Rangeを使わずに…

はてなキーワードへのリンクを削除するGreasemonkey with DOM:Range

追記:DOM:Rangeはタイミングがシビアな感じなので、下のスクリプトはAutoPagerizeと同時に使うとうまく動かなくなるっぽい。それに、*.g.hatena.ne.jpの日記のキーワードが消えてない。グダグダなので書き直す。document.createRange()とかを使うと、画面表…

JavaScriptグループに入った。

うれしいことにg:javascriptのグループに招待されたので入った。 javascripterの日記 - g:javascriptが僕の所。 まだ何を書くかは決めてない。もしかしたら使わないかも。グループからダイアリーに移るブックマークレット: javascript:location.href=locati…

Infinity-InfinityはNaN

InfinityやNaNについて。 0でもInfinityでも-Infinityでもなく、NaNになる。Infinity/0はInfinity Infinity*0はNaN Infinity/InfinityもNaN 0/Infinityは0 1/Infinityも0 使い道は特に見当たらない。関係ないけど、 NaN==NaNはfalseになる。NaN!=NaNがtrueっ…

Firefox Add-onsのページの紹介文がHTMLむき出しっぽくなっているのを直すGreasemonkey

Add-ons for Firefoxの上部。 // ==UserScript== // @name Firefox Add-ons fix // @namespace http://d.hatena.ne.jp/javascripter/ // @description 紹介文がHTMLむき出しっぽくなっているのを直す // @include https://addons.mozilla.org/ja/firefox/* /…

___defineSetter___とか___defineGetter__

事の発端 普通に値を返す関数とか、引数をセットする関数とか定義するのとなにが違うのかな・・・。値を返す、セットする関数っていうのを明示するため?よく分からない。 HTMLElement.prototype.__defineGetter__('innerText',function()this.textContent); do…

linkのhrefを変えるとCSSをダイナミックに読み込んでくれる

ので、このブログを前のデザインで見たくなったら javascript:document.getElementsByTagName('link')[5].href='/theme/nimbus/nimbus.css';void 0; というブックマークレットを実行。上のブックマークレットはおそらくどのはてなダイアリーでも使える。Grea…

Firefoxでもalt属性だけしかない画像をポップアップさせる

var images=document.evaluate('//img[@alt and not(@title)]',document,null,7,null); for(var i=0;i

JavaScript1.6のArrayのメソッドを使う

$('id1','id2'); みたいにやると、配列形式でElementが返ってくる関数。引数の数が不定な関数 - 素人がプログラミングを勉強するブログで作ったやつをJavaScript1.6のメソッドを使って書き直した。 $=function(){ return Array.slice(arguments).map( functi…

XPathをすごく長ったらしく書く

たとえば、Item - データベース: AutoPagerize - wedataのページのurlの欄をリンクにしたいとき。 短く書くと var links=document.evaluate('//div[@class="entry-content"]//th[text()="url"]/following-sibling::td',document,null,7,null); for(var i=-1;…

アキバBlogの小さい画像を大きい画像にすげ替える

Array.prototype.forEach.call(document.images, function(image){ if(image.src.match(/^http:\/\/img\.akibablog\.net\/dragon\/\d{4}-\d{2}-\d{2}-\d{3}-s\.jpg/)){ image.src=image.src.replace(/-s(\.\w+?)$/,'$1'); } } ) 本当はハマっているXPathを使…

はてなダイアリーに貼ってあるGreasemonkeyスクリプトにマッチするXPath

document.evaluate('//pre[@class="syntax-highlight" and span[@class="synComment" and contains(text(),"==UserScript==")]]',document,null,7,null); な感じ。 2007-06-21 - いぬビームを元に、上記のXPathを使ったりちょっと改造したけど、AutoPagerize…

はてなハイクのニコニコ動画を含むエントリーを消す

XPathResult.prototype.forEach=function(callback,thisObj){ for(var i=0;i

XPath入門、実用例

すべての要素 //* div直下のp //div/p style属性を持つspan //span[@style] alt属性のないimg //img[not(@alt)] idがheaderな要素 id("header") rel属性がshortcut iconなlink要素 //link[@rel="shortcut icon"] 子要素にimgを持つa要素 //a[./img] 子、子孫…

EscキーでフォーカスをはずせるようにするGreasemonkey

// ==UserScript== // @name Esc de blur // @namespace http://d.hatena.ne.jp/javascripter/ // @description Escキーでフォーカスをはずせるようにします。 // @include http://* // ==/UserScript== document.addEventListener('keydown', function(e){ …

userstyles.orgのスタイルをStylish入れてなくてもダウンロードできるようにするブックマークレット

javascript:location.href=document.evaluate('//link[@rel="stylish-update-url"]',document,null,7,null).snapshotItem(0).href; http://userstyles.org/styles/ほげほげ のページで実行するとCSS本体がゲットできる

FirebugでもJavaScript1.7のletとか、JavaScript1.8とか使いたいんだけど

どうすればいいんでしょう。 version(170); とかやってもそんなもの無いと怒られるんです。ページが見つかりません | Mozilla Developer Networkによると、 HTMLで使うには <script type="application/javascript;version=1.8"> ... あなたのコード ... </script> とすればいいようなのですが、Firebugの場合は・・・?困っ…

JQueryのようなメソッドチェーン

String.prototype.log=function(){ alert(':'+this+':'); return this; } "foo".log().log() thisをreturnするだけで何度でも呼べるようになる。JQueryがDOM要素を返さないのは、そんなまねをするとDOM要素のprototypeを大量に作らなければいけなくなるから…

faviconを動的にスマートに変える

faviconを変える試み - 素人がプログラミングを勉強するブログで書き直すと言ってたので書き直した。 function replaceFavicon(url){ var fav=document.evaluate('//head/link[@rel="shortcut icon"]',document,null,9,null).singleNodeValue||document.getE…

配列のシャッフル

function shuffle(size){ var array=new Array; for(var i=0;i

for(var i=0;i<hogehoge;i++)は長すぎる

function loop(f,n){ for(var i=0;i

英単語っぽい部分を[]で囲う

'Boys be ambitious.'.split(/\b/).map( function(word){ return (word.match(/[a-zA-Z]+/))?'['+word+']':word; } ).join(''); "[Boys] [be] [ambitious]."って返ってくる。うまい具合にやってマウスオーバー辞書をGreasemonkeyで作りたい。 テキストノード…

JavaScript1.8を使う

たとえば、配列の値の合計を求めるプログラム。いままでだったら var list=[0,1,2,3,4,5,6,7,8,9]; var result=0; for(var i=0;i

Firebugあるかどうか判定

Firebug有効にしてGmail使うと、警告みたいのが出る。どうやって判定してるのか気になったから調べた。 if((document.getElementById('_firebugConsole'))&&(typeof console)){ alert('Firebug') } こんな感じでいいみたい。Gmailはconsole.firebugの存在を…